2012-08-17 113 views
2

我有一个回购协议是(开始)为5.6G大小:Git永久删除文件不会导致较小的回购?

[email protected] ~/repo (master) 
$ du -d 0 -h 
5.6G . 

然而,这种回购包含了一些不再需要在回购大型二进制文件。最初他们在目录结构中的不同位置,但都被命名为“tc.dat”。作为“清理”的步骤,我创建了一个cruft目录,git mv所有的人都到这个克鲁夫特目录,改变自己的名字tc.dat1tc.dat2

然后我有这些文件的5,tc.dat1通过tc.dat5

然后我跟着this question,并使用filter-branch以及清理步骤来删除cruft目录中的这些文件的所有实例。但是,这仍然会在回购中留下原始文件名(在迁入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

会http://stackoverflow.com/questions/2116778/reduce-git-repository-size/2116892#2116892(及其提及的问题)有帮助吗? – VonC 2012-08-17 16:56:41

回答

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 questionsgit-refloggit-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)在我开始在。