Git推 - 次优包 - 内存不足

问题描述:

我真的可以在这里使用一些帮助。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://*.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

  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

我有同样的问题了Git的克隆。回购是25GB。我用了一个替代的命令,对我来说,所需的源根控制,

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

在此之后,我能够承诺和拉就像任何其他的存储库。

git config --global pack.threads 1 
+1

这是唯一对我有用的东西。呃,我讨厌仍然需要处理旧的共享服务器。 – 2015-05-14 10:28:40

我意识到这有点迟,但由于上面的一些帮助我(谢谢@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的位减轻混帐负荷和一切正常。

以下命令解决了该问题对我来说:

git config --global pack.windowMemory 256m 

这会影响增量压缩的效果,所以你可能想先尝试大一号的,像1G,这取决于你的硬件和带宽。

更多细节在这里:https://www.kernel.org/pub/software/scm/git/docs/git-pack-objects.html

这个答案都不帮我。我的问题是,我的小服务器有1GB的RAM和没有交换。我制作了sudo service apache2 stop & sudo service mysql stop +从htop(完成后我得到~100mb的RAM)和git push正确的杀死一个未使用的进程。