How to find out which files take up the most space in git repo?
git
Solution
twalberg's answer does the trick. I wrapped it up in a loop so that you can list files in order by size:
while read -r largefile; do
echo $largefile | awk '{printf "%s %s ", $1, $3 ; system("git rev-list --all --objects | grep " $1 " | cut -d \" \" -f 2-")}'
done <<< "$(git rev-list --all --objects | awk '{print $1}' | git cat-file --batch-check | sort -k3nr | head -n 20)"
`head -n 20` restricts the output to the top 20. Change as necessary.
Once you've identified the problem files, check out this answer for how to remove them.
Problem
I need to make the repo smaller. I think I can make it smaller by removing problematic binary files from git history: ``` git filter-branch --index-filter 'git rm --cached --ignore-unmatch BigFile' ``` And then releasing the objects: ``` rm -rf .git/refs/original/ git reflog expire --expire=now --all git gc --aggressive --prune=now ``` (Feel free to comment if those commands are wrong.) The problem: How to identify those big files so that I can asses whether to remove them from git history? Most likely they are not in the working tree anymore - they have been deleted and probably also untracked with: ``` git rm --cached BigFile ```