我真的可以在这里使用一些帮助。
我刚创建了一个新的裸仓库,作为开发推送的生产目标。 我还将服务器上的工作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上找到的所有内容。
我试图解决这个问题,最终达到了目的。请告诉我,那里有人知道可以做些什么来完成这项工作?
答案 0 :(得分:16)
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
正确。