In one of my projects (checked into a git repository) I have added a huge directory (15000 files, 3GB). When I realized this was wrong, I deleted it, but it seems like it is still in history.
Having it still there makes a project clone a very long task. Once the project is cloned, the .git directory is about 4GB but the real project size is just 15MB.
My question is: how can I tweak the history such as I make sure that 3GB directory is deleted? Or is there another way to decrease the entire project download size and speed up the clone process?
解决方案
So you know which commit introduced the huge directory. Say this was done in revision AAAAAAA.
To get rid of the commit, it is not sufficcient to delete the directory (with commit BBBBBBB) and check in again: the commit AAAAAAA is still there, blowing up your repo size.
To get rid of the commit, we need git rebase. Open your git console and type
git rebase -i AAAAAAA~1
This will bring up an editor where the commit AAAAAAA is in the first line. Remove this line (i.e. when Vim is your editor, hit dd) and the commit where you removed the directory again (BBBBBBB), save the file and quit (:wqa).
After this, rebasing starts and when it has finished, AAAAAAA and BBBBBBB are no longer there. Really.
You could now also trigger some housekeeping with git gc and fetch a cup of coffee while it's running.