在我的一個項目中(簽入git倉庫),我添加了一個巨大的目錄(15000個文件,3GB)。當我意識到這是錯誤的,我刪除了它,但它似乎仍在歷史中。清理git歷史
讓它仍然在那裏使項目克隆一個非常長的任務。克隆項目後,.git目錄約爲4GB,但實際項目大小僅爲15MB。
我的問題是:我如何調整歷史記錄,例如確保3GB目錄被刪除?還是有另一種方法來減少整個項目的下載大小並加快克隆過程?
在我的一個項目中(簽入git倉庫),我添加了一個巨大的目錄(15000個文件,3GB)。當我意識到這是錯誤的,我刪除了它,但它似乎仍在歷史中。清理git歷史
讓它仍然在那裏使項目克隆一個非常長的任務。克隆項目後,.git目錄約爲4GB,但實際項目大小僅爲15MB。
我的問題是:我如何調整歷史記錄,例如確保3GB目錄被刪除?還是有另一種方法來減少整個項目的下載大小並加快克隆過程?
所以,你知道哪個提交引入了巨大的目錄。假設這是在修訂AAAAAAA
中完成的。
爲了擺脫提交,刪除目錄(帶有提交BBBBBBB
)並再次檢入是不夠的:提交AAAAAAA
仍然存在,炸燬了您的repo大小。
要擺脫提交,我們需要git rebase
。打開你的git的控制檯,然後輸入
git rebase -i AAAAAAA~1
這將打開一個編輯器,提交AAAAAAA
是在第一線。刪除此行(即當Vim是您的編輯器時,點擊dd),並提交您再次刪除目錄(BBBBBBB
),保存該文件並退出(:wqa
)。
之後,重新啓動開始,當它完成後,AAAAAAA
和BBBBBBB
不再存在。真。
您現在可以通過git gc
觸發一些家務管理,並在運行時取一杯咖啡。
也看到這個答案:git push heroku - stop heroku pushing/uploading massive file
嘗試按照本指南:http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html
基本上,你可以做
git reset --hard HEAD~1
或
git reset --hard [prev_commit]
只是爲了澄清:該3GB已經在倉庫一會兒,正確嗎?如果它不是最近的提交或者其他人已經在大提交之後提交了提交,那麼處理是不同的。 – 2012-03-24 19:50:26
目錄在那裏約一個月。我在一個月前刪除了它。可能會有一些文件被更改。該項目只有2名開發人員。 – 2012-03-24 20:04:18
可能的重複[完全刪除文件從git回購](http://stackoverflow.com/questions/5563564/remove-files-from-git-repo-completely) – ralphtheninja 2012-03-24 20:25:49