Windows上的Git,“内存不足-malloc失败”


70

遇到存储库问题,并尝试了几乎所有可能的配置设置,例如。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 repack的各种选项,但始终返回相同的错误。

几乎放弃了,只想创建一个新的仓库,但我想先问一下:)


可能相关。您设法解决了吗?
cregox

在我们的案例中,我们通过7 GB存储库上的链接解决了该问题。我的建议是,如果您不能使用GIT,请尝试使用Hg或Perforce。
cregox 2012年

我认为这是MsGit中的错误,而不是Git本身的问题。也不要认为完全不需要离开Git,尤其是不要搬到Mercurial!
timothyclifford 2012年

如果是这样,您是否不能仅仅尝试一下Ubuntu笔式驱动器?
cregox 2012年

更新后,我用新文件创建了一个新存储库,其中包含3gb的文件,这里的链接未解决任何问题...下面仅git config --global pack.threads 1引用了有帮助的内容。那行得通。但是无论如何...您是否尝试过Ubuntu笔式驱动器?
cregox

Answers:


107

我在这里找到了对我有用的解决方案。

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

[core]
  packedGitLimit = 128m
  packedGitWindowSize = 128m

[pack]
  deltaCacheSize = 128m
  packSizeLimit = 128m
  windowMemory = 128m

1
如果在64位计算机上运行,​​则msysgit似乎未使用32位的正确默认值。但是应该这样,因为客户端是32位的。这些值对我有用:[core] packedGitLimit = 256mpackedGitWindowSize = 32m [pack] deltaCacheSize = 256m packSizeLimit = 1g windowMemory = 256m
fmuecke 2014年

1
我遇到了类似的问题,在我的情况下,禁用了zip的增量压缩,并且自定义二进制压缩文件正常工作。在.git / info / attributes中,我添加了“ * .zip二进制-delta”。
MartinTeeVarga

128m似乎有点低。是每个线程吗?如果是这样的话,这确实更有意义,好像32位git在所有线程上分配的4096m以上,当然会崩溃
Force Gaia

在Linux上也有帮助,对于git lfs,当平均文件大小为〜100 mb时,提交大小为〜8gb。
Vitaly Zdanevich

20

作为参考(您可能已经看过),处理该问题的msysgit案例是票证292

它提出了几种解决方法:

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

*.zip binary -delta

Gitattributes手册页

对于属性delta设置为false的路径,将不尝试对blob进行增量压缩。


也许更简单的解决方法是在大文件提交之前以某种方式重置历史记录,然后从那里重做其他提交。


不幸的是,尽管没有运气,他们已经尝试了其中的大多数方法,但还是谢谢了+1
timothyclifford 2012年

1
git config --global pack.windowMemory 256m为我工作
Kabbalah

要禁用某些文件的增量压缩,请在.git / info / attributes中添加“ * .zip二进制
-delta

15

编辑:自git-v2.5.0 (2015年8月)以来,git-for-windows(以前为MSysGit)
      提供了Pan.student注意到的64位版本。       在这个答案中,我建议安装Cygwin 64位(提供64位Git版本)。


达到4GB障碍时,我Out of memory, malloc failed使用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位:

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

如果我的回答不能解决您的问题,您还可以检查以下页面:


我已经从git-scm.com使用64位git解决了大型存储

1
安装64位版本时,当我在包含“大”“ * .lib”文件(每个20-100mb +)的存储库中进行重新存储时,解决了“内存不足-malloc失败”错误。
罗布森

-1

这对我有用,但我必须使用以下命令通过命令行设置选项:

git --global core\pack [param] value
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.