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?
Related problems
- Make Git consume less disk space
- How do I remove a submodule?
- Git pull error: unable to create temporary sha1 filename
- Why is my git repository so big?
- Detach (move) subdirectory into separate Git repository
- How to remove unused objects from a git repository?
- What does git do when we do : git gc - git prune
- How to remove unreferenced blobs from my Git repository