Remove a directory permanently from git
In my personal git repo, I have a directory that contains thousands of small images that are no longer needed. Is there a way to delete them from the entire git history? I have tried
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch imgs" HEAD
and
git filter-branch --tree-filter 'rm -fr imgs' HEAD
but the size of the git repo remains unchanged. Any ideas?
Thanks
Actually none of these techniques workedfor me. I found the most reliable was was to simply pull locally into another repo:
git pull file://$(pwd)/myGitRepo
It also saves you the hassle of deletig old tags.
see the story on my blog: http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/
The ProGit book has an interesting section on Removing Object.
It does end with this:
Your history no longer contains a reference to that file.
However, your reflog
and a new set of refs that Git added when you did the filter-branch
under .git/refs/original
still do, so you have to remove them and then repack the database. You need to get rid of anything that has a pointer to those old commits before you repack:
$ rm -Rf .git/refs/original
$ rm -Rf .git/logs/
$ git gc
$ git prune --expire
( git prune --expire
is not mandatory but can remove the directory content from the loose objects)
Backup everything before doing those commands, just in case ;)
git-filter-branch by default saves old refs in refs/original/*
namespace.
You need to delete them, and then do git gc --prune=now
下一篇: 从git中永久删除一个目录