2010-06-22 133 views
26

我在共享主機上託管一個git repo。我的回購未必有幾個它非常大的文件,每次我嘗試現在運行在回購「混帳氣相色譜法」的時候,我被任務共享託管服務提供商使用了太多的內存殺害。有沒有辦法限制git gc可以消耗的內存量?我的希望是,它可以交換內存使用的速度,只需要更長的時間來完成工作。有沒有辦法限制「git gc」使用的內存量?

+1

postimum相關:http://stackoverflow.com/a/10293304/274502 – cregox 2012-08-29 21:00:59

+0

是的,有一個類似的問題在Dreamhost(這個問題被標記)。沒有那麼多的情況下,當'git'死亡,但'darcs'(另一個VCS)總是被殺死,所以它在http://Dreamhost.com上無法使用。 – 2015-02-25 20:26:40

回答

14

是的,看看在幫助頁面git config,並期待在pack.*選項,具體pack.depthpack.windowpack.windowMemorypack.deltaCacheSize

爲git的需要映射每個對象到內存中,因此一個非常大的對象會導致大量的內存使用,而不考慮窗口和三角洲緩存設置這不是一個完全精確的尺寸。

你可能有更好的運氣打包本地和「手動」傳輸包文件到遠程端,添加一個.keep文件,以便遠程git永遠不會嘗試徹底重新包裝一切。

5

你可以使用關閉三角洲屬性禁用增量壓縮那些路徑名的只是斑點:

foo/.git/info/attributes(或foo.git/info/attributes如果它是一個純倉庫)(見gitattributes三角洲條目,以gitignore對於模式語法):

/large_file_dir/* -delta 
*.psd -delta 
/data/*.iso -delta 
/some/big/file -delta 
another/file/that/is/large -delta 

這不會影響存儲庫的克隆。影響其它儲存庫(即克隆),放屬性中一個.gitattributes文件,而不是(或者除了)info/attributes文件。

+0

這是迄今爲止關於大型文件最有用的答案。謝謝。我有一些PSD的回購,並且它曾經需要千兆字節的內存來做一個git gc,現在它需要100MB的內存。涼。 – 2016-10-29 14:14:49

30

我從這次link指令。建議與Charles Baileys一樣的想法。

命令的副本是在這裏:

git config --global pack.windowMemory "100m" 
git config --global pack.packSizeLimit "100m" 
git config --global pack.threads "1" 

這與共享的託管帳戶爲我工作的HostGator的。

+2

謝謝!這適用於我,但我認爲在第二行有一個錯字 - 沒有SizeLimit選項;它應該閱讀:git config --global pack.packSizeLimit「100m」 – Max 2012-02-01 18:29:20

+1

這工作完美。如果它一開始不起作用,請在windowMemory和packSizeLimit上設置一個下限。就我而言,25米是最佳選擇。 – jsapara 2012-08-08 22:35:17

+0

我更改了選項名稱。原來的鏈接被破壞,不知道在哪裏指向它。 – phunehehe 2013-09-23 16:16:45

8

Git的重新包裝的內存使用量是:(pack.deltaCacheSize + pack.windowMemory) × pack.threads。相應的默認值是256MiB,無限制,nproc。

增量緩存沒有用:大部分時間花費在滑動窗口上計算增量,其中大部分都被丟棄;緩存倖存者以便它們可以重複使用一次(寫入時)不會改進運行時。該緩存也不在線程之間共享。

默認情況下,窗口存儲器通過pack.windowgc.aggressiveWindow)的限制。限制包裝的方式是一個壞主意,因爲工作集的大小和效率會有很大差異。最好將兩者都提高到更高的值,並依靠pack.windowMemory來限制窗口大小。

最後,線程有分裂工作集的缺點。降低pack.threads並增加pack.windowMemory,這樣總數保持不變應該會延長運行時間。

重新包裝有其他有用的可調參數(pack.depth,pack.compression,位圖選項),但它們不影響內存使用。

+0

似乎並不完全真相?你有一個主意:http://stackoverflow.com/questions/42175296/git-gc-uses-a-lot-of-memory-even-i-limited-it – Alex 2017-02-11 14:01:04

相關問題