Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is my .git file huge?

I accidentally added and committed some very large (100MB+) PSD files in a git directory. I made a bunch of edits to those files while they were in the directory, but then realized they shouldn't be there and removed them from the directory.

I then ran:

git add --all && git commit -m "Removed large psds"

The files in my directory now add up to less than a dozen MB, except for the .git file itself however, which is 700MB+.

What is going on here? Is it retaining old versions of the removed .PSD files? Does that mean git doesn't ever clear out the space gained from deleting files? How do I have it forget about those files completely so that I can bring the .git file size back down?

like image 459
Yarin Avatar asked Mar 28 '13 23:03

Yarin


People also ask

Why is .Git so large?

So, your entire git content will be less than your actual source code size. But, even in that case, you keep on committing large files, your git repo size may increase due to the version history. You have to reduce your git repo size in order to work it seamlessly.

What happens if I delete .Git file?

Deleting the . git folder does not delete the other files in that folder which is part of the git repository. However, the folder will no longer be under versioning control.


2 Answers

Your .git folder is really big because the PSDs files are still present in the repository. To remove them, you need to modify the history using git filter-branch. Here explains how to use this command. After, you will need to clean the repository.

I created a script to help this job. If you want to use it, you can download it from github. Any comments are welcome.

like image 55
William Seiti Mizuta Avatar answered Sep 28 '22 02:09

William Seiti Mizuta


You want to use the BFG Repo-Cleaner, a faster, simpler alternative to git-filter-branch designed for removing large files from Git repos.

Download the BFG jar (requires Java 6 or above) and run this command:

$ java -jar bfg.jar  --strip-blobs-bigger-than 10MB  my-repo.git

Any files over 10MB in size (that aren't in your latest commit) will be removed from your Git repository's history. You can then use git gc to clean away the dead data:

$ git gc --prune=now --aggressive

The BFG is typically 10-50x faster than running git-filter-branch and the options are tailored around these two common use-cases:

  • Removing Crazy Big Files
  • Removing Passwords, Credentials & other Private data

Full disclosure: I'm the author of the BFG Repo-Cleaner.

like image 35
Roberto Tyley Avatar answered Sep 28 '22 03:09

Roberto Tyley