Git在Windows上,“内存不足 – malloc失败”

遇到存储库的问题,并尝试几乎所有可能的configuration设置发现那里例如。 pack.windowMemory等等

我相信有人已经检查了一个大的文件到远程存储库,现在每次我尝试拉或推,GIT试图打包并用完内存:

Auto packing the repository for optimum performance. You may also run "git gc" manually. See "git help gc" for more information. Counting objects: 6279, done. Compressing objects: 100% (6147/6147), done. fatal: Out of memory, malloc failed (tried to allocate 1549040327 bytes) error: failed to run repack 

已经试过git gcgit用各种选项重新包装 ,但不断返回相同的错误。

几乎放弃,即将创build一个新的回购,但认为我会先问周围:)

我find了一个解决scheme, 这对我有效。

在.git / config文件(客户端和/或服务器)中,我添加了以下内容:

 [core] packedGitLimit = 128m packedGitWindowSize = 128m [pack] deltaCacheSize = 128m packSizeLimit = 128m windowMemory = 128m 

作为参考(你可能已经看到了),处理这个问题的msysgit案例是票292 。

它提出了几个解决方法:

  • 全局禁用增量压缩。 为此,您必须将pack.window设置为0 。 当然这会使光盘上的版本库更大。
  • 禁用某些文件的增量压缩。 检查联机帮助页上的delta标志以gitattributes
  • git config --global pack.threads 1
  • git config --global pack.windowMemory 256m (你已经试过了,但是也在“ 拉出警告时出错:次最佳包 – 内存不足 ”)。
  • 其他设置在“ git push fatal:无法创build线程:资源暂时不可用 ”和“ Git pull失败,包装包头错误 ”中提到,以防与pack相关。
  • sm4补充说 :

要禁用某些文件的增量压缩,请在.git/info/attributes中添加:

 *.zip binary -delta 

从Gitattributes手册页 :

delta设置为false的path将不会尝试增量压缩。


也许一个简单的解决方法是以某种方式重置大文件提交之前的历史logging,并从那里重做其他提交。

编辑 :由于git-v2.5.0 (Aug / 2015) , git-for-windows (以前MSysGit)
提供了Pan.student注意到的64位版本 。
在这个答案中,我build议安装Cygwin 64位(提供64位Git版本)。


我得到了一个类似Out of memory, malloc failed问题,当达到4GB的障碍使用MSysGit :

 > git --version git version 1.8.3.msysgit.0 > file path/Git/cmd/git path/Git/cmd/git: PE32 executable for MS Windows (console) Intel 80386 32-bit > time git clone --bare -v ssh://linuxhost/path/repo.git Cloning into bare repository 'repo.git'... remote: Counting objects: 1664490, done. remote: Compressing objects: 100% (384843/384843), done. remote: Total 1664490 (delta 1029586), reused 1664490 (delta 1029586) Receiving objects: 100% (1664490/1664490), 550.96 MiB | 1.55 MiB/s, done. Resolving deltas: 100% (1029586/1029586), done. fatal: Out of memory, malloc failed (tried to allocate 4691583 bytes) fatal: remote did not send all necessary objects real 13m8.901s user 0m0.000s sys 0m0.015s 

MSysGit达到4 GB屏障后崩溃

最后从Cygwin git 64位修复它:

 > git --version git version 1.7.9 > file /usr/bin/git /usr/bin/git: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows > time git clone --bare -v ssh://linuxhost/path/repo.git Cloning into bare repository 'repo.git'... remote: Counting objects: 1664490, done. remote: Compressing objects: 100% (384843/384843), done. remote: Total 1664490 (delta 1029586), reused 1664490 (delta 1029586) Receiving objects: 100% (1664490/1664490), 550.96 MiB | 9.19 MiB/s, done. Resolving deltas: 100% (1029586/1029586), done. real 13m9.451s user 3m2.488s sys 3m53.234s 

从Cygwin的git 64位成功

linuxhost 64位的FYI:

 repo.git> git config -l user.email=name@company.com core.repositoryformatversion=0 core.filemode=true core.bare=true repo.git> git --version git version 1.8.3.4 repo.git> uname -a Linux linuxhost 2.6.32-279.19.1.el6.x86_64 #1 SMP Sat Nov 24 14:35:28 EST 2012 x86_64 x86_64 x86_64 GNU/Linux 

如果我的回答没有解决你的问题,你也可以检查这些页面:

  • 即使有5.6GB的RAM和50GB的硬盘,git克隆内存不足
  • Git克隆失败,内存不足错误 – “致命:内存不足,malloc失败(试图分配905574791字节)/致命:索引包失败”
  • git-clone内存分配错误
  • MSysGit问题跟踪器

这工作对我来说,但我不得不通过命令行设置选项使用:

 git --global core\pack [param] value