很长时间以来,我一直在寻找以下内容:
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 -最终删除那些对象
翻翻过去那场雪