tags:

views:

188

answers:

4

My .git file has grown to 229Mb and I wondering what the best way to cut down the size is. I know about git gc and have been using it a fair amount. I'm not totally sure about how git works, but I know that there is packaged information in there that I no longer need. Like, I know I no longer need the first five branches saved. Is there a way to completely erase really old branches or commits or something like that?

A: 

The easiest would be to do a

git clone --depth 1 your_old_repo

on a new location and then swap it back in place.

see also git faq

Peter Tillemans
Shallow clone has limited functionality, unfortunately.
Jakub Narębski
A: 

I'd do a bit of garbage collecting with git gc

Rob Wilkerson
With the `--prune=<age>` option, presumably.
Jefromi
+5  A: 

If you want to keep your (reachable) commit history intact, then expire, repack, prune, and garbage collect:

git reflog expire --expire=0 --all
git repack -ad
git prune 
git gc

This should be the minimal size you can get your repo and keep your commit history.

If not, i.e., you want or do not mind starting afresh with the current state of the repo as the initial commit, then Peter Tillemans' approach will do it.

Jeet
This looks like a good approach, thanks!
DavidP6
+1  A: 

You have some techniques in "Reduce git repository size", but I mention also in it than git gc alone can increase the size of the repo!

So some filter branch (also referenced in that question) can be needed, if nobody is actively pulling from your repo.

One factor which tends to increase rapidly the size of a Git repo is the versioning of too many binaries. It is one of Git limits, so try to:

  • version such large object in their own Git repo, referenced as submodules
  • or version them in an external repository made for deliveries, like a Maven repository (i.e. "not in a Git repo")
VonC