我有一个回购(开始时)是5.6G大小:
aparkin@mymachine ~/repo (master)
$ du -d 0 -h
5.6G .
但是,这个repo包含了许多不再需要在repo中的大型二进制文件。最初它们位于目录结构的不同位置,但都名为“tc.dat”。作为“清理”步骤,我创建了一个cruft
目录,并将git mv
所有目录创建到此cruft目录中,将其名称更改为tc.dat1
,tc.dat2
等。< / p>
然后我有5个这样的文件,tc.dat1
到tc.dat5
然后我跟着this question,并使用filter-branch
和清理步骤删除cruft
目录中这些文件的所有实例。但是,这仍然会在repo中保留原始文件名(在移入cruft
之前)。然后我重复了在所有提交中从原始位置删除它们的步骤,并再次执行清理步骤:
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
毕竟,如果我做了
git log --all -- tc*.dat
我在历史记录中看不到任何匹配项,向我表明它们已完全删除。但是,当我再次执行du
时,回购仍然是5.6G大小。鉴于这些文件大约包含0.5GB,我希望看到这个数字下降。
我错过了什么?
答案 0 :(得分:3)
好的,我遗失了一些东西。
按照Git pull error: unable to create temporary sha1 filename的提示,我尝试了一些命令并做了:
$ git-prune
$ git-prune-packed
$ du -h -d 0
5.2G
这大约是0.4G,这大约是我想要的文件的大小。我还在阅读few other questions以及git-reflog
和git-gc
的手册页时注意到我对reflog expire
和--aggressive --prune
的使用不正确。两者都争论历史要走多远,在这两种情况下我都想要所有历史记录,因此需要now
参数:
$ rm -rf .git/refs/original/
$ git reflog expire --all --expire=now
$ git gc --aggressive --prune=now
$ du -h -d 0
4.5G .
相比我开始时相当显着的节省(1.1G)。