145M = .git/objects/pack/
I wrote a script to add up the sizes of differences of each commit and the commit before it going backwards from the tip of each branch. I get 129MB, which is without compression and without accounting for same files across branches and common history among branches.
Git takes all those things into account so I would expect much much smaller repository. So why is .git so big?
I've done:
git fsck --full
git gc --prune=today --aggressive
git repack
To answer about how many files/commits, I have 19 branches about 40 files in each. 287 commits, found using:
git log --oneline --all|wc -l
It should not be taking 10's of megabytes to store information about this.
I recently pulled the wrong remote repository into the local one (git remote add ...
and git remote update
). After deleting the unwanted remote ref, branches and tags I still had 1.4GB (!) of wasted space in my repository. I was only able to get rid of this by cloning it with git clone file:///path/to/repository
. Note that the file://
makes a world of difference when cloning a local repository - only the referenced objects are copied across, not the whole directory structure.
Edit: Here's Ian's one liner for recreating all branches in the new repo:
d1=#original repo
d2=#new repo (must already exist)
cd $d1
for b in $(git branch | cut -c 3-)
do
git checkout $b
x=$(git rev-parse HEAD)
cd $d2
git checkout -b $b $x
cd $d1
done