从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

链接地址: http://www.djcxy.com/p/45173.html

上一篇: Remove a directory permanently from git

下一篇: .gitignore is not ignoring one specific folder