我遇到了一个仓库问题,尝试了几乎所有可能的配置设置,比如. 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,但总是返回相同的错误。
几乎放弃了,正要创建一个新的仓库,但我想我应该先问问周围:)
7条答案
按热度按时间3b6akqbq1#
我找到了一个适合我的解决方案Here。
在.git/config文件(客户端和/或服务器端)中,我添加了以下内容:
字符串
w9apscun2#
作为参考(您可能已经看到了),处理该问题的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
中禁用某些文件的增量压缩,请添加:字符串
关于Gitattributes man page:
对于属性
delta
设置为false的路径,将不会对blob尝试增量压缩。也许一个更简单的解决方法是在大文件提交之前重置历史记录,然后从那里重做其他提交。
krcsximq3#
编辑:自git-v2.5.0(2015年8月)起,git-for-windows(原MSysGit)
提供64-bits versions,正如Pan.student所注意到的。
在这个回答中,我建议使用install Cygwin 64位(提供64位Git版本)。
我在使用MSysGit达到4GB屏障时遇到了类似的
Out of memory, malloc failed
问题:字符串
的数据
最后git 64 bits从Cygwin修复它:
型
的
仅供参考,
linuxhost
64位:型
如果我的回答不能解决您的问题,您也可以查看这些页面:
tcomlyy64#
在选定的答复中提出的一些选择似乎只是部分地与问题有关,或者根本没有必要。
从https://git-scm.com/docs/git-config来看,似乎只需设置以下选项就足够了(仅为此处的项目设置):
字符串
从手册:
pack.windowMemory
git-pack-objects[1]中的每个线程在命令行上没有给出限制的情况下,对于打包窗口内存所消耗的最大内存大小。该值可以后缀为“k”,“m”或“g”。如果不进行配置(或显式设置为0),则没有限制。
有了这个,我从来没有超过指定的512 m * 每线程 *,实际使用的RAM大约是一半的时间。当然,这里选择的数量是用户特定的,取决于可用的RAM和线程数。
nqwrtyyt5#
我在Ubuntu上遇到了这个错误消息。在我的情况下,一个大的提交文件引起了问题。我意识到这个问题是由于一个文件,我没有注意到最初。
识别大文件:
要在Git历史记录中识别大文件,可以使用以下命令:
字符串
此命令列出Git历史记录中的对象,按大小排序,并以人类可读的格式显示文件大小。
来源:How to find/identify large commits in Git history
删除大文件:
一旦识别出这个大文件,你就可以使用以下命令从Git历史中删除它:
型
此命令筛选分支历史记录并删除指定的文件。
来源:Removing large files from Git history
Update .gitignore:
之后,请确保删除该文件或将其添加到.gitignore:
型
请记住添加、提交和推送更改,以在远程存储库中反映它们。
希望这能有所帮助。
flvlnr446#
在我的情况下,上面的配置更改没有帮助。有帮助的是一个简单的服务器重新启动(在我的情况下
sudo shutdown -r now
)。看起来像是有什么东西在服务器上占用了大量内存。希望这也能帮助到别人。9njqaruj7#
这对我来说很有效,但我必须通过命令行设置选项:
字符串