我們有一個包含源代碼和二進制文件的git repo。裸回購現已達到〜9GB,克隆它需要很長時間。大部分時間都花在「遠程:壓縮對象」上。在提交一個更大的二進制文件的新版本之後,獲取花費很長時間,也花費在服務器上壓縮對象。修復由於大的二進制文件而變慢的git repo
看完之後git pull without remotely compressing objects我懷疑二進制文件的delta壓縮會讓我們感到困擾,但我並不是100%確定如何去解決這個問題。
哪些具體步驟來解決服務器上的裸回購?我的猜測:
- 添加如「* .zip文件-Delta」條目我想進入的.git /信息的所有分機/屬性
- 運行「git的重新包裝」,更與何選擇?是否-adF重新包裝所有內容,並在給定的文件類型上沒有進行過增量壓縮的情況下給我一個回購協議?
- 運行'git prune'。我以爲這是自動完成的,但在運行它,當我打得四處說回購的裸克隆由〜2GB減少大小
- 克隆回購,與我在git的添加相同的條目添加並提交.gitattributes在裸回購/信息/屬性
上午我到的東西?
更新:
在這一些有趣的測試結果。今天,我開始了一個有問題的回購的裸體克隆。我們的4GB內存不夠強大的服務器耗盡內存並開始交換。 3小時後,我放棄了......
然後我不是克隆了我的最高最新的工作副本裸露的回購協議。在工作站之間克隆一個花費約5分鐘。然後我把它推到服務器上作爲一個新的回購。克隆即回購只花了7分鐘。
如果我正確地解釋這一點,更好的包裝回購進行更好,即使沒有禁用增量壓縮二進制文件。我想這意味着上述步驟確實是我想要在短期內完成的,但是另外我需要找出如何限制git允許用於打包/壓縮服務器的內存量,這樣我就可以避免交換。
如果它的事項:服務器運行的git 1.7.0.4和工作站上運行1.7.9.5。
更新2:
我也對我的testrepo下面的步驟,並認爲我將有機會做他們的服務器上(備份後)
限制使用內存包裝時對象
混帳配置pack.windowMemory百米
混帳配置包。對於一些擴展回聲 '與* .tar.gz -Delta' >>資訊/ packSizeLimit200米
禁用增量壓縮屬性
回聲 '* .tar.bz2格式-Delta' >>信息/屬性
回聲 '* .bin文件-Delta' >>資訊/屬性
回聲 '*。PNG-δ' >>資訊/屬性重新包裝庫,收集垃圾
混帳重新包裝-a -d -F --window內存百米--max盒大小的200米
混帳GC
更新3:
此操作後的一些意想不到的副作用:Issues after trying to repack a git repo for improved performance
將存儲二進制文件在其他地方是一個選項? Git真的很糟糕,已經被公認的大型二進制文件。這就是爲什麼有[分開](http://caca.zoy.org/wiki/git-bigfiles)[產品](http://git-annex.branchable.com/)爲... – eis
當我們從git開始,我們添加了uC二進制文件,我們的rootfs和工具鏈,只需檢查一下git修訂版即可獲得過去的完整快照。我們對git的預測不夠充分,我們對此一無所知。我打算正確地解決這個問題(一直在看git-annex,但不知道git-bigfiles),但作爲一個短期解決方案,我想盡可能提高當前回購的性能。 – anr78
我覺得將你的開發環境/工具鏈存儲在虛擬機中是最好的做法(如果你絕對必須存儲你的開發環境的不同版本,只需在你的倉庫之外存儲一個新的磁盤映像)。 –