2012-03-24 113 views
3

在我的一個項目中(簽入git倉庫),我添加了一個巨大的目錄(15000個文件,3GB)。當我意識到這是錯誤的,我刪除了它,但它似乎仍在歷史中。清理git歷史

讓它仍然在那裏使項目克隆一個非常長的任務。克隆項目後,.git目錄約爲4GB,但實際項目大小僅爲15MB。

我的問題是:我如何調整歷史記錄,例如確保3GB目錄被刪除?還是有另一種方法來減少整個項目的下載大小並加快克隆過程?

+0

只是爲了澄清:該3GB已經在倉庫一會兒,正確嗎?如果它不是最近的提交或者其他人已經在大提交之後提交了提交,那麼處理是不同的。 – 2012-03-24 19:50:26

+0

目錄在那裏約一個月。我在一個月前刪除了它。可能會有一些文件被更改。該項目只有2名開發人員。 – 2012-03-24 20:04:18

+1

可能的重複[完全刪除文件從git回購](http://stackoverflow.com/questions/5563564/remove-files-from-git-repo-completely) – ralphtheninja 2012-03-24 20:25:49

回答

4

所以,你知道哪個提交引入了巨大的目錄。假設這是在修訂AAAAAAA中完成的。

爲了擺脫提交,刪除目錄(帶有提交BBBBBBB)並再次檢入是不夠的:提交AAAAAAA仍然存在,炸燬了您的repo大小。

要擺脫提交,我們需要git rebase。打開你的git的控制檯,然後輸入

git rebase -i AAAAAAA~1 

這將打開一個編輯器,提交AAAAAAA是在第一線。刪除此行(即當Vim是您的編輯器時,點擊dd),並提交您再次刪除目錄(BBBBBBB),保存該文件並退出(:wqa)。

之後,重新啓動開始,當它完成後,AAAAAAABBBBBBB不再存在。真。

您現在可以通過git gc觸發一些家務管理,並在運行時取一杯咖啡。


也看到這個答案:git push heroku - stop heroku pushing/uploading massive file

+0

感謝您的回答。這對我來說似乎是一個很好的計劃,但我實際上更喜歡創建一個新的存儲庫,將代碼複製到那裏並從頭開始。這對我來說比較容易,至少我完全理解了這個過程:) – 2012-03-27 10:07:20

+0

'-i'和'〜1'是什麼意思? – qed 2015-01-18 15:59:47

+1

@qed:-i表示交互式(請參閱rebase文檔),〜1表示1修訂版本(https://www.kernel。組織/酒吧/軟件/ SCM /混帳/文檔/ gitrevisions.html) – eckes 2015-01-18 16:23:05