Reduce Git repository size

git, git-clean, git-gc, git-maintenance

Solution

Update Feb. 2021, eleven years later: the new `git maintenance` command (man page) should supersede `git gc`, and can be scheduled.

Original: `git gc --aggressive` is one way to force the prune process to take place (to be sure: `git gc --aggressive --prune=now`). You have other commands to clean the repo too. Don't forget though, sometimes `git gc` alone can increase the size of the repo!

It can be also used after a `filter-branch`, to mark some directories to be removed from the history (with a further gain of space); see here. But that means nobody is pulling from your public repo. `filter-branch` can keep backup refs in `.git/refs/original`, so that directory can be cleaned too.

Finally, as mentioned in this comment and this question; cleaning the reflog can help:

git reflog expire --all --expire=now
git gc --prune=now --aggressive

An even more complete, and possibly dangerous, solution is to remove unused objects from a git repository

Note that `git filter-repo` now (Git 2.24+, Q4 2019) replaces the obsolete `git filter-branch` or BFG: it is a python-based tool, to be installed first.

Joe suggests:

# Find the largest files in .git:
git rev-list --objects --all | grep -f <(git verify-pack -v  .git/objects/pack/*.idx| sort -k 3 -n | cut -f 1 -d " " | tail -10)

# Strat filtering these large files:
git filter-repo --path-glob '../../src/../..' --invert-paths --force
#or
git filter-repo --path-glob '*.zip' --invert-paths --force
#or
git filter-repo --path-glob '*.a' --invert-paths --force

git remote add origin git@github.com:.../...git
git push --all --force
git push --tags --force

Problem

I tried looking for a good tutorial on reducing repository size, but I found none. How do I reduce my repository size? It's about 10 MB, but Heroku only allows 50 MB and I'm nowhere near finished developing my application. I added the usual suspects (log, vendor, doc, etc.) to the .gitignore file already. Although I only added .gitignore recently. What can I do?

Original source

Related problems