(已解决,请参阅问题正文的底部。)
很长时间以来,我一直在寻找以下内容:
- http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/ 和
- http://progit.org/book/ch9-7.html
几乎相同的方法,但是它们都将对象保留在打包文件中...卡住了。
我试过的
git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_name'
rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc
包中仍然有文件,这就是我所知道的:
git verify-pack -v .git/objects/pack/pack-3f8c0...bb.idx | sort -k 3 -n | tail -3
还有这个:
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch file_name" HEAD
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
相同...
尝试过git clone
技巧,它删除了一些文件(〜3000个),但最大的文件仍然存在...
我的存储库中有一些较大的旧文件,大约200M,我真的不希望它们在那里...而且我也不想将存储库重置为0 :(
解决方案:这是摆脱文件的最短方法:
- 检查.git / packed-refs-我的问题是我在
refs/remotes/origin/master
远程存储库中有一行,请将其删除,否则git不会删除那些文件 - (可选)
git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort -k 3 -n | tail -5
-检查最大的文件 - (可选)
git rev-list --objects --all | grep a0d770a97ff0fac0be1d777b32cc67fe69eb9a98
-检查哪些文件 git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_names'
-从所有版本中删除文件rm -rf .git/refs/original/
-删除git的备份git reflog expire --all --expire='0 days'
-使所有松散的物体失效git fsck --full --unreachable
-检查是否有松散的物体git repack -A -d
-重新包装git prune
-最终删除那些对象