Git GC跟随Git Push说“一切都是最新的”

时间:2016-11-03 13:48:05

标签: git

我有一个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推送到掌握,以便每次都清理干净?

1 个答案:

答案 0 :(得分:2)

您无法将垃圾收集的数据推送到服务器。你需要运行

git gc

在服务器上。或者等一两周,直到服务器自动调用垃圾收集。

尝试推送已清理的数据确实有问题everything up to date:垃圾收集不会更改您的回购内容,只会删除不需要的数据(不在分支或标签中)并压缩冗余数据(不改变任何实际数据。)

推送分支意味着推送此分支所需的所有数据。 gc可能已删除的所有不需要的东西都不属于任何分支,因此Git甚至都不会尝试推送它。

您机器和服务器上的分支也是相同的,它只是一个不同的表示。无需再次上传。

如果从历史记录中删除提交,Git不会删除提交。它只是将它们与图形断开连接。然后Git(服务器和客户端)定期运行gc,删除不需要的提交并重新打包所需的提交。