如何在Git中从"致命:内存不足?mmap失败:无法分配内存"中恢复?

Rem*_*.co 12 git branching-and-merging

让我先从一些背景开始:

我不得不将关键的Magento网店升级到新版本.为了确保所有现有代码在升级后仍能正常工作并进行一些升级后更改,我从整个Magento安装中创建了一个Git存储库(不包括明显的内容,如4.5GB图像,./ var目录等),推送它到源并在开发服务器上克隆它.做了一个新的分支,执行了升级,更改了代码,将它全部交给了dev分支并将其推回原点.

现在是升级"真实"商店的时候了,这意味着我必须将生产服务器上的主分支与开发分支合并.然后每次都错了:

git fetch - 工作

git branch 说: * master

git merge origin/dev 可怕的错误(只在等待一段时间后输出):

fatal: Out of memory? mmap failed: Cannot allocate memory

同去的git checkout dev,git rebase master origin/dev等等.

在现有问题中对stackoverflow进行了一些研究并花了一个晚上尝试建议,包括(但不限于):

git gc

Counting objects: 48154, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (37152/37152), done.
fatal: Out of memory, malloc failed (tried to allocate 527338875 bytes)
error: failed to run repack
Run Code Online (Sandbox Code Playgroud)

和:

git repack -a -d --window-memory 10m --max-pack-size 20m

Counting objects: 48154, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (37152/37152), done.
fatal: Out of memory, malloc failed (tried to allocate 527338875 bytes)
Run Code Online (Sandbox Code Playgroud)

除了上一个命令,我也试过这个(非常相似).由于该链接提到了32位系统可能存在的问题,因此提及所涉及的三个系统的规范可能是明智之举:

  • 'dev'服务器:x86_64 Gentoo 2.6.38-hardened-r6 // 4核和8GB RAM
  • 'origin'服务器:x86_64 Gentoo 2.6.38-hardened-r6 // 2核和4GB RAM
  • 'live'服务器:x86_64 Debian 4.3.2-1.1 2.6.35.5-pv1amd64 //(VPS)2核和3GB RAM

有谁知道我怎么能从中恢复?重新包装原产地是否有效?如果是,我如何说服生产服务器获取存储库的新副本?任何帮助将不胜感激!

Ric*_*sen 14

您获得的错误来自存储库中的大文件.Git试图将文件的全部内容放在内存中,这使它变得cro..

尝试升级Git

Git 1.7.6上个月发布,在发行说明中有这个可爱的一点:

使用"git add"添加大于core.bigfilethreshold的文件(默认为1/2 Gig)将直接将内容发送到packfile,而无需在内存中同时保存它及其压缩表示.

升级到1.7.6可能会使您运行git gc甚至可能git merge,但我无法验证,因为很难获得进入该状态的存储库(条件必须恰到好处).

尝试删除违规文件

如果升级Git没有帮助,您可以尝试使用从存储库中删除大文件git filter-branch.在此之前,请尝试使用备份大文件git cat-file -p <commit_sha1>:path/to/large/file >/path/to/backup/of/large/file.

你会想要在你最强壮的机器(大量内存)上进行这些操作.

如果这样做,请尝试重新克隆到其他计算机(或只是rsync .git目录).