Git使用过多的内存,无法完成

最终更新和修复 :这里的解决scheme原来是两件事的结合:使用Windows Git而不是Cygwin Git作为Graham Borland的 build议 ,而Gitconfiguration设置pack.threads = 1gc.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”

也许暂时添加一个比生活更大的交换文件,去其他地方喝几杯咖啡会有帮助吗?