Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove a directory permanently from git

Tags:

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

like image 521
adk Avatar asked Aug 01 '09 14:08

adk


People also ask

How do I remove a directory from a git branch?

Just run the rm command with the -f and -r switch to recursively remove the . git folder and all of the files and folders it contains. This Git repo remove command also allows you to delete the Git repo while allowing all of the other files and folder to remain untouched.

How do I permanently delete a file from a git repository?

The easiest way to delete a file in your Git repository is to execute the “git rm” command and to specify the file to be deleted. Note that by using the “git rm” command, the file will also be deleted from the filesystem.

How do I remove a directory in git bash?

Delete a Directory ( rm -r ) To delete (i.e. remove) a directory and all the sub-directories and files that it contains, navigate to its parent directory, and then use the command rm -r followed by the name of the directory you want to delete (e.g. rm -r directory-name ).


2 Answers

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 ;)

like image 58
VonC Avatar answered Sep 28 '22 12:09

VonC


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/

like image 20
Antony Stubbs Avatar answered Sep 28 '22 12:09

Antony Stubbs