Git推 - 次优包 - 内存不足

时间:2012-03-05 04:57:41

标签: git memory git-push

我真的可以在这里使用一些帮助。

我刚创建了一个新的裸仓库,作为开发推送的生产目标。 我还将服务器上的工作web目录作为git repo。 服务器在centos5.5上运行git 1.7.4.1

在web目录中创建新的repo后,我执行了一个git add。 它记录了像2300&一些奇怪的文件&超过230k插入。

我做了新添加的文件库的提交。很干净。 当我做了一个git push origin master时,它一直给我这个(请注意,我有8个CPU,因此有8个线程。文档说这是正常的);

# 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天,并尝试了我可以在谷歌和SO上找到的所有内容。

我试图解决这个问题,最终达到了目的。请告诉我,那里有人知道可以做些什么来完成这项工作?

7 个答案:

答案 0 :(得分:16)

  1. 可能是git是处理大量大blob的次优工具。
  2. 您可以禁用多线程压缩以节省内存:git config pack.threads 1(除了其他内存限制选项,例如新版Git中的core.bigfilethreshold

答案 1 :(得分:11)

以下命令为我解决了这个问题:

git config --global pack.windowMemory 256m

这会影响增量压缩的效果,因此您可能需要先尝试更大的尺寸,例如1g,具体取决于您的硬件和带宽。

此处有更多详情:https://www.kernel.org/pub/software/scm/git/docs/git-pack-objects.html

答案 2 :(得分:7)

git config --global pack.threads 1

答案 3 :(得分:3)

我对git clone有同样的问题。回购是25GB。我使用了另一个命令,对我来说它需要对源进行根控制,

rsync -avz -e ssh --progress user@computerName:repo/Directory destination/folder

在此之后,我能够像任何其他存储库一样提交和提取。

答案 4 :(得分:1)

在我的情况下,我之前已将服务器的虚拟内存减少为空,以便删除分页文件,以便我可以释放分区并增加主分区的大小。这有减少我的工作记忆的效果,结果是git无法处理大文件。在再次增加我的虚拟内存后,所有内容都已排序。

答案 5 :(得分:0)

我意识到这在游戏中有点晚了,但由于上面的一些帮助了我(感谢@Ashitakalax),这是我的两分钱。 与上面的相同问题(inflateInit:内存不足)当从Wordpress开发实例上游移动更改到测试时,git会因内存不足而中止,这通常是由于../uploads/目录中包含图像文件的更改。所有这些都在共享主机中无法访问全局git配置,因此我们这样做:

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 load并且很好。

答案 6 :(得分:0)

这些答案都没有帮助我。我的问题是我的小服务器有1GB的RAM而没有SWAP。我做了sudo service apache2 stop& sudo service mysql stop +从htop中删除一个未使用的进程(在我得到~100mb RAM之后)和git push正确。