遇到存储库问题并尝试了几乎所有可能的配置设置,例如。 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 gc &带有各种选项的 git repack ,但不断返回相同的错误。
几乎放弃了,即将创建一个新的回购,但我想先问一下:)
答案 0 :(得分:96)
我找到了一个适合我的解决方案Here。
在.git / config文件(客户端和/或服务器)中,我添加了以下内容:
[core]
packedGitLimit = 128m
packedGitWindowSize = 128m
[pack]
deltaCacheSize = 128m
packSizeLimit = 128m
windowMemory = 128m
答案 1 :(得分:18)
供参考(您可能已经看过),处理该问题的msysgit案例是ticket 292。
它提出了几种解决方法:
pack.window
to 0。当然,这将使光盘上的存储库大得多。gitattributes
上的delta
标记。git config --global pack.threads 1
git config --global pack.windowMemory 256m
(您已经尝试了那个,但也在“Error when pulling warning: suboptimal pack - out of memory”中说明了)pack
相关的。要禁用某些文件的增量压缩,请在
.git/info/attributes
中添加:
*.zip binary -delta
对于属性
delta
设置为false的路径,不会尝试增量压缩。
也许更简单的解决方法是在大文件提交之前以某种方式重置历史记录,并从那里重做其他提交。
答案 2 :(得分:14)
编辑:自git-v2.5.0 (2015年8月) ,git-for-windows(以前为MSysGit)
提供64-bits versions注意到的Pan.student
在这个答案中,我建议install Cygwin 64位(提供64位Git版本)。
当达到4GB屏障时,我使用MSysGit获得了类似的Out of memory, malloc failed
问题:
> 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
最后来自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
FYI 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
如果我的回答无法解决您的问题,您也可以查看以下页面:
答案 3 :(得分:0)
这对我有用,但我必须使用以下命令行设置选项:
git --global core\pack [param] value
答案 4 :(得分:0)
所选答案中建议的某些选项似乎仅与问题部分相关或根本没有必要。
从https://git-scm.com/docs/git-config来看,似乎只要设置以下选项就足够了(这里只为项目设置):
git config pack.windowMemory 512m
来自手册:
<块引用>pack.windowMemory
当命令行没有给出限制时,git-pack-objects[1]中每个线程为pack window memory消耗的最大内存大小。该值可以以“k”、“m”或“g”为后缀。如果未配置(或明确设置为 0),则没有限制。
有了这个,我从来没有超过指定的 512m 每个线程,大多数时候实际使用的 RAM 大约是这个的一半。当然,此处选择的数量是用户特定的,具体取决于可用 RAM 和线程数。