Git使用过多的内存,无法完成
最终更新和修复 :这里的解决scheme原来是两件事的结合:使用Windows Git而不是Cygwin Git作为Graham Borland的 build议 ,而Gitconfiguration设置pack.threads = 1
和gc.aggressiveWindow = 150
。
我有一个大的本地Git仓库,一个SVN仓库的git svn clone
,大约有40,000个提交。 我试图在这个仓库上运行git gc
,并且无处可去:
$ git gc --auto Auto packing the repository for optimum performance. You may also run "git gc" manually. See "git help gc" for more information. Counting objects: 25966, done. Compressing objects: 100% (25249/25249), done. fatal: Out of memory, malloc failed (tried to allocate 426523986 bytes) error: failed to run repack
我在一个64位双核Win7机器上运行Git 1.7.5.1 Cygwin内部有4GB内存。 .git
目录目前略高于6.1GB。
我已经尝试过运行git gc --aggressive
,看看更完整的系统是否能够修复它,但没有运气:我得到了一个类似的消息,以相同的大小企图malloc
,但相当高的对象数(508 485个,压缩493 506个)。
我也试过了,就像Google提出的那样,我的.gitconfig
文件的[pack]
部分就是.gitconfig
。 最完整的是从另一个StackOverflow问题 。 我的.gitconfig
现在有以下相关的行,但设置这些似乎没有什么区别:
[pack] windowMemory = 16m threads = 1 window = 1 depth = 1 deltaCacheSize = 1
任何build议,我怎么能得到git
我的仓库?
编辑 : 马克Longair build议更多的.gitconfig
文件更改。 我做了下面的新行。 但是这些变化没有任何区别。
[core] packedGitWindowSize = 1m packedGitLimit = 256m [pack] packSizeLimit = 128m
编辑2 : 迈克尔Krelin build议增加交换/页面文件的大小(WinXP说明在这里 ,它是类似的Win7的)。 我试过了,但没有什么区别,实际上我只是增加了可用的最大尺寸,而且看起来好像Windows从不试图增加它所使用的页面文件的大小。
我现在正在看是否这是由内存限制或强加给Cygwin造成的。 要检查“强加”,我试图以pipe理员权限运行Cygwin。 要检查“内部”(看起来更可能),我正在玩Cygwin的最大内存设置 。
编辑3 :虽然我可能更喜欢使用Cygwin,事实certificate,Windows Git客户端处理内存问题就好了。 似乎我会经常回到那个时候,当我的存储库需要一个整洁。
运行一个本地Windows客户端(如msysGit)可能会有更多的运气,而不是在Cygwin中尝试这样做。
我有同样的问题,尝试了迄今为止提到的解决scheme,但都没有成功。 但是我的git gc问题是在我把大的图像文件添加到回购后开始的,所以我创build了.gitattributes文件,并为这些大文件closures了增量压缩:
*.tga -delta *.psd -delta
有效。
您可能想尝试限制低于默认值的一些其他configuration选项包括:
-
pack.packSizeLimit
-
core.packedGitWindowSize
-
core.packedGitLimit
…所有这些都logging在git config
文档中 。 在每种情况下,特别值得一提的是,我曾经犯过什么错误。
在共享的Linux主机上唯一有助于避免这个错误的是添加
[pack] packSizeLimit = 64m threads = 1
至
.gitconfig
最重要的是“线程= 1”
也许暂时添加一个比生活更大的交换文件,去其他地方喝几杯咖啡会有帮助吗?