我有一个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
,删除不需要的提交并重新打包需要的提交。