Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
664 views
in Technique[技术] by (71.8m points)

github - Cleaning up git history

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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.


See also this answer: git push heroku - stop heroku pushing/uploading massive file


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...