试图从超级凌乱的存储库中删除文件,但它们似乎不会被删除

时间:2014-10-15 16:39:22

标签: git

所以我们回到旧项目做一些更新,现在过去没有人提到存储库是多么混乱。这是一个非常古老的提交许多提交,它似乎没有得到很好的管理。

长话短说.git文件的大小现在是4.02Gb(是的,#g,右边是Gb)。我试图通过扫描并删除所有在第一个地方永远不会被跟踪的旧文件(我可以立即看到一些不需要的.ipa&.s和.swfs有)。

我使用了一个小的shell脚本,atlassian推荐他们的Maintaining a Git Repository,它列出了我的十大罪犯,这非常有帮助,但我很难删除文件来自历史。

我已尝试运行git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD,因为每个人似乎都建议然后运行垃圾收集。我已经尝试过不使用激进的GC,因为它太大了,需要几个小时才能运行。但是在运行带有git gc --prune=now的gc后,它似乎没有任何效果,当我运行脚本给出最大文件列表时,会出现相同的文件。

我应该使用哪些命令来删除先前从我的存储库中的所有历史记录中提交的文件,以帮助缩小文件大小?

2 个答案:

答案 0 :(得分:1)

你重写了你目前所在的任何一个分支(HEAD)。可能有其他引用使旧提交保持活动 - 其他分支或旧提交上的标记。

当然,在您强行推送分支的新副本之前,旧的远程(例如origin/master)仍将保留旧的提交。

答案 1 :(得分:1)

您在the Checklist for Shrinking a repository

中缺少这两个步骤
  

删除git-filter-branch备份的原始引用:说git   for-each-ref --format =“%(refname)”refs / original / | xargs -n 1 git   update-ref -d。

     

使用git reflog expire -expire = now --all。

使所有reflogs过期

另外,我会避免git gc --aggressive使用

git repack -ad --depth=250 --window=250