Git GC后跟Git Push说"Everything is up to date"



我有一个Git存储库,其中签入了一些Blobs。我清除了他们,清理了历史。一切似乎都很顺利。

现在如果我输入

git checkout master

我得到一个200mb的下载

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"是最新的。

,如果我在此时再次克隆repo,我将从21409开始如何将git gc上推到master,以便每次都能干净地下推?

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

git gc

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

这是有意义的,试图推动清理数据回来与everything up to date:垃圾收集不会改变你的repo内容,它只删除不需要的数据(不是在分支或标签)和压缩冗余数据(不改变任何实际数据)。

推入分支意味着推入该分支所需的所有数据。gc可能删除的所有不需要的东西都不是任何分支的一部分,所以Git甚至不会尝试推送它。

你的机器上的分支和服务器上的分支是一样的,只是表现形式不同。没有必要再上传了。

如果你从历史记录中删除提交,Git不会删除提交。它只是将它们从图中分离出来。然后Git(服务器和客户端)定期运行gc,删除不需要的提交并重新打包需要的提交。

最新更新