我有一个git存储库,其中.git
文件夹 7MB 。然后我添加并提交了一个 16MB 的.exe文件,后跟:
git gc --aggressive && git prune
以上我的.git
文件夹现在 23MB 。
接下来,我完成了git rebase -i
并选择了 drop :
在引入16MB文件的提交( c8185ff )上,我完成了rebase并再次运行:
git gc --aggressive && git prune
现在,当我衡量.git
文件夹时,它仍然 23MB 。
上面执行的git rebase
不能完全从历史记录中删除提交 - 好像文件从未被引入 - 从而将.git
文件夹带回 7MB 大小?
我还试图对存储库进行全新的克隆,大小仍然 23MB - 我认为在进行新的克隆时会清除reflog。
答案 0 :(得分:2)
默认情况下,git gc
仅修剪超过2周的松散对象。
要强制修剪所有对象,请使用--prune=all
:
git -c gc.reflogExpire=now gc --prune=all
但是,如果仍然可以通过任何引用(例如origin/master
之类的远程引用或reflog)来访问该对象,则不会对其进行修剪。
这就是我们必须将gc.reflogExpire
配置设置为now
的原因。
(对于git prune
[在gc之后没必要],它是--expire
)