Git的GC,无法完成

问题描述:

最后的更新和修复:这里的解决方案竟然是两两件事的组合:使用Windows的Git而不是Cygwin的混帐作为Graham Borlandsuggested,和Git的配置设置pack.threads = 1gc.aggressiveWindow = 150Git的GC,无法完成

我有一个大的本地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的机器拥有4GB RAM上运行的Git 1.7.5.1内Cygwin的。 .git目录目前略高于6.1GB。

我试过运行git gc --aggressive,看看更完整的系统是否能够修复它,但没有运气:我收到类似的消息,上面有相同的大小尝试malloc,但一个相当高的对象数(计算508,485次,压缩493,506次)。

我也试过了 - 正如Google提供的那样,我的.gitconfig文件的[pack]的一部分;最完整的是从another * question。我现在.gitconfig有以下相关线路,但设置这些看起来已经没有什么区别:

[pack] 
     windowMemory = 16m 
     threads = 1 
     window = 1 
     depth = 1 
     deltaCacheSize = 1 

我如何能得到gitgc我的仓库有什么建议?

编辑Mark Longairsuggested更多.gitconfig文件更改。我制作了下面的新行。但是这些变化没有任何区别。

[core] 
     packedGitWindowSize = 1m 
     packedGitLimit = 256m 
[pack] 
     packSizeLimit = 128m 

编辑2Michael Krelinsuggested增加交换/页面文件大小(操作系统指令here,它对于Win7的类似)。我尝试过,但没有任何区别,实际上我只是增加了可用的最大大小,而且看起来好像Windows从不试图增加它所使用的页面文件的大小。

我现在正在研究这是由内存限制引起的还是强加给Cygwin引起的。要检查“强加于”,我试图以管理员权限运行Cygwin。要检查“内部”(看起来更可能),我正在玩Cygwin's maximum memory settings

编辑3:尽管我可能更喜欢使用Cygwin,但事实证明,Windows Git客户端处理内存问题就好了。当我的存储库需要整理时,似乎我会经常回到这个问题。

运行本机Windows客户端(如msysGit)可能会带来更多运气,而不是尝试在Cygwin中执行此操作。

+1

我对Windows Git客户端的体验一般认为他们处理内存管理的情况更糟糕 - 我已经能够让Cygwin Git处理一个约15,000个提交SVN存储库的Windows Git客户端,我尝试将其禁用。不过,值得一试,我想! –

+0

Whee!就像我可能不喜欢正常使用Windows Git客户端一样,工作得很好。谢谢! –

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

+0

如果我不”今天晚上我会得到任何地方,我将重新启动我的电脑,并在今天晚上留下一个巨大的页面文件,并让它一夜之间... –

+0

哦,我没有意识到你在windows上 - 我认为添加交换文件是一个在shell中的一些命令的问题。那么,我希望它仍然可以在Windows上,但你知道如何做到这一点;-) –

+0

没有运气。事实上,我增加了可用的页面文件空间,但Windows并未决定使用它,这意味着可能存在一些Cygwin内存限制问题。我现在正在调查... –

,你可能会想尝试限制比默认值低一些其他的配置选项包括:

  • pack.packSizeLimit
  • core.packedGitWindowSize
  • core.packedGitLimit

......所有这一切都是记录在git config documentation。特别值得一提的是,在每种情况下都要检查哪些单位是可以理解的,我过去犯过错误。

+0

没有'core.deltaCacheSize'。我怀疑你指的是'pack.deltaCacheSize',我已经调整过了。不过,我现在试试其余的,谢谢! –

+0

@me_and:oops - 我从我的回答中删除了那一个 –

+0

没有运气。我将用我使用的新配置更新这个问题,但简短的版本是,你所建议的任何更改似乎都不会影响'git gc'试图分配的内存量。 –

我有同样的问题,尝试迄今未提及的解决方案。但我的问题git的GC开始后,我加入大图像文件回购,所以我创建.gitattributes文件,并关闭了那些大文件的增量压缩:

*.tga -delta 
*.psd -delta 

它的工作。

+0

ZOMG它的工作!我一直在共享主机上的git存储库中遇到大型文件的问题,这些文件会占用太多内存。这解决了一个我已经存在的问题:DDDD – scone

+0

经过大量的试验和错误,有时让它工作,然后在几次提交后再次破产,这带来了解决方案(迄今为止)。我认为这个答案应该更高。 –

,以帮助避免主机共享Linux的这个错误的唯一的事情是添加

[pack] 
    packSizeLimit = 64m 
    threads = 1 

.gitconfig 

最重要的是 “线程= 1”