我有一个Git存储库,可以检查一些Blob。我已清除它们并清理历史记录。这一切似乎都没问题。
现在,如果我做了
git checkout master
我得到200 MB的下载
git count-objects -v
显示in-pack:21409
git gc --aggressive --prune=now
接着是
git count-objects -v
显示in-pack:15976
然而,这是我遇到麻烦的地方。
git push origin --force --tags
给了我 一切都是最新的
git status
给了我
在分支主机上 您的分支机构与“origin / master”保持同步。 无需提交,工作目录清理
如果我此时再次克隆回购,我将从21409重新开始 如何将git gc推送到掌握,以便每次都清理干净?
答案 0 :(得分:2)
您无法将垃圾收集的数据推送到服务器。你需要运行
git gc
在服务器上。或者等一两周,直到服务器自动调用垃圾收集。
尝试推送已清理的数据确实有问题everything up to date
:垃圾收集不会更改您的回购内容,只会删除不需要的数据(不在分支或标签中)并压缩冗余数据(不改变任何实际数据。)
推送分支意味着推送此分支所需的所有数据。 gc
可能已删除的所有不需要的东西都不属于任何分支,因此Git甚至都不会尝试推送它。
您机器和服务器上的分支也是相同的,它只是一个不同的表示。无需再次上传。
如果从历史记录中删除提交,Git不会删除提交。它只是将它们与图形断开连接。然后Git(服务器和客户端)定期运行gc
,删除不需要的提交并重新打包所需的提交。