2013-03-18 39 views
1

我當前項目的git倉庫,包含源代碼和圖像文件,大小爲1.2千兆字節。但所有分支的實際文件大小隻有大約205兆字節。如何在不丟失源代碼文件歷史的情況下減少資源庫大小?

我是git的初學者,我猜想巨大的存儲庫大小是由在存儲庫中移動圖像文件引起的。由於git沒有捕獲移動的文件,因此它將圖像存儲在歷史記錄的舊位置以及圖像位於其新位置。我不確定這是否會造成如此大的開銷。

無論如何,我怎樣才能減少庫大小,而不會丟失源代碼文件的歷史?我可以放棄圖像文件的歷史。

回答

2

Git不會存儲移動或複製文件的額外副本。如果內容相同,那麼git存儲的唯一東西就是新的樹結構。在Git的對象模型

詳情:http://git-scm.com/book/en/Git-Internals-Git-Objects

git gc是做一個資料庫定期內務管理的常見方式,給它一個鏡頭,看看你的資料庫收縮。

如果不這樣做(有時git gc會窒息,特別是在有大量二進制數據的存儲庫),請嘗試使用git repack。它通常需要一段時間,但如果可能的話,它應該縮小存儲庫。試試這個:

git repack -adf --window=250 --depth=250 --window-memory=1024M

注意--window-memory選項;如果你的機器有足夠的內存,你可能會不使用這個選項,但如果沒有,它應該防止git repack內存不足。根據我的經驗,將其設置爲可用內存的一半或更少通常工作正常。

+0

'git gc'命令至少釋放了400兆字節。使用另外一個命令,我用'2048M'或'1024M'內存不足,但是我的機器上安裝了4GB的ram。沒有其他資源關鍵任務正在運行。你有什麼主意嗎? – danijar

+0

看來'git gc'有很好的效果。也許'git repack'不會好得多。但是你可以嘗試試驗這些值並看看。降低'--window-memory'甚至更多;如果仍然失敗,請嘗試降低其他選項。 – jsageryd

+0

你是對的,有情人「窗口」和「深度」值,但它沒有明顯的收益。 – danijar

相關問題