从git中永久删除一个目录
在我个人的git repo中,我有一个包含数千个不再需要的小图片的目录。 有没有办法从整个git历史中删除它们? 我努力了
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch imgs" HEAD
和
git filter-branch --tree-filter 'rm -fr imgs' HEAD
但git repo的大小保持不变。 有任何想法吗?
谢谢
其实这些技术都不适合我。 我发现最可靠的就是简单地将本地拉入另一个回购:
git pull file://$(pwd)/myGitRepo
它还可以节省您删除旧标签的麻烦。
在我的博客上看到这个故事:http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/
ProGit书中有关于删除对象的有趣部分。
它确实以此结束:
您的历史记录不再包含对该文件的引用。
但是,当您在.git/refs/original
下执行filter-branch
时,您的reflog
和一组Git添加的.git/refs/original
仍然存在,因此您必须删除它们,然后重新包装数据库。 在重新包装之前,您需要摆脱任何指向这些旧提交的指针:
$ rm -Rf .git/refs/original
$ rm -Rf .git/logs/
$ git gc
$ git prune --expire
( git prune --expire
不是强制性的,但可以从松散对象中删除目录内容)
在执行这些命令之前备份所有内容,以防万一;)
git-filter-branch默认将refs/original/*
命名空间中的旧引用保存起来。
你需要删除它们, 然后做git gc --prune=now