2012-03-05 59 views
13

我真的可以在這裏使用一些幫助。Git推 - 次優包 - 內存不足

我剛剛創建了一個新的裸回購作爲開發推送的生產目標。 我也有服務器上的工作網頁目錄作爲git回購。 服務器在centos5.5上運行git 1.7.4.1

在web目錄中創建新的回購後,我執行了一個git add。 它收集了一些像2300 &一些奇數文件&超過230k插入。

我做了一個新添加的文件庫的提交。去了很好,乾淨。 當我做了一個git push origin master的時候,它一直給我這個(請注意,我有8個CPU,因此8個線程.docs說這是正常的)。

# git push --mirror 
Counting objects: 2000, done. 
Delta compression using up to 8 threads. 
warning: suboptimal pack - out of memory 
fatal: inflateInit: out of memory (no message) 
error: failed to push some refs to '/home/ggadmin/gg-prod.git' 

我已經嘗試了以下事情來解決這個問題,但都產生相同的結果;

git repack -adf --window-memory=100m 
           ^tried running this up to 1024m. Same result. 

即使嘗試了推力,但得到了同樣的東西,只有一個malloc錯誤;

# git push -f origin master 
Counting objects: 2000, done. 
Delta compression using up to 8 threads. 
warning: suboptimal pack - out of memory 
fatal: Out of memory, malloc failed (tried to allocate 2340 bytes) 
error: failed to push some refs to '/home/ggadmin/gg-prod.git' 

我一直在爲此工作了2天,並嘗試了幾乎所有我可以在谷歌和這裏搜索。

我已經達到了自己的目的,試圖讓這個問題得到解決。請告訴我,外面有人知道做什麼可以做這項工作?

+0

可以肯定的是,這與'postBuffer'無關? http://stackoverflow.com/questions/6842687/the-remote-end-hung-up-unexpectedly-while-git-cloning/6849424#6849424 – VonC 2012-03-05 09:00:08

+0

請解釋一下你的意思,VonC,因爲這對我而言是一個新詞尊重Git。 – Skittles 2012-03-06 02:20:58

+0

我想知道'git config --global http.postBuffer 524288000'將無法讓你的推送工作。 – VonC 2012-03-06 06:41:34

回答

14
  1. 可能是git是處理大量大塊的次優工具。
  2. 您可以禁用多線程壓縮到內存保存:git config pack.threads 1(除了在新的Git到其他內存限制的選項,比如core.bigfilethreshold
+1

Well Vi ...在北極夏季,git運行速度比沿着管道運行的糖蜜慢,但它工作。謝謝! – Skittles 2012-03-06 00:02:06

+0

你可以考慮將git repo中的大件事物(仍然是對它們進行版本控制)進行外部化,或者對任務使用其他方法。 Git可能試圖在您的所有數據中找到類似的塊。嘗試調整'core.bigfilethreshold'選項(git> = v1.7.6) – 2012-03-06 01:42:25

+0

再次感謝,Vi!不幸的是,我正在使用v1.7.4.1。但是我會把它保留在我的Git知識項目的頂部。 – Skittles 2012-03-06 02:19:44

3

我有同樣的問題了Git的克隆。回購是25GB。我用了一個替代的命令,對我來說,所需的源根控制,

rsync -avz -e ssh --progress [email protected]:repo/Directory destination/folder 

在此之後,我能夠承諾和拉就像任何其他的存儲庫。

6
git config --global pack.threads 1 
+1

這是唯一對我有用的東西。呃,我討厭仍然需要處理舊的共享服務器。 – 2015-05-14 10:28:40

0

我意識到這有點遲,但由於上面的一些幫助我(謝謝@Ashitakalax),這裏是我的兩分錢。 與上面相同的問題(inflateInit:內存不足)將Wordpress開發實例上游的更改從上游移動到測試時,git由於內存不足而中止,這通常是由於../uploads/目錄中存儲圖像文件的更改所致。所有這一切都沒有進入全球混帳配置一個共享的主機,所以我們做的:

0- in repo: git commit -m "some relevant details" 

以記錄更改

1- rsync -av --progress repo/wp-content/uploads/ test/wp-content/uploads 

移動批量圖像修正/改變

2- in test: git add -A 

跟蹤對事物的測試端的新東西

3- in test: git fetch origin 

現在從回購

4- in test: git merge origin/master 

,最後合併取休息...

rsync的位減輕混帳負荷和一切正常。

0

這個答案都不幫我。我的問題是,我的小服務器有1GB的RAM和沒有交換。我製作了sudo service apache2 stop & sudo service mysql stop +從htop(完成後我得到~100mb的RAM)和git push正確的殺死一個未使用的進程。