Git的GC,无法完成
最后的更新和修复:这里的解决方案竟然是两两件事的组合:使用Windows的Git而不是Cygwin的混帐作为Graham Borlandsuggested,和Git的配置设置pack.threads = 1
和gc.aggressiveWindow = 150
。Git的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
我如何能得到git
到gc
我的仓库有什么建议?
编辑:Mark Longairsuggested更多.gitconfig
文件更改。我制作了下面的新行。但是这些变化没有任何区别。
[core]
packedGitWindowSize = 1m
packedGitLimit = 256m
[pack]
packSizeLimit = 128m
编辑2:Michael Krelinsuggested增加交换/页面文件大小(操作系统指令here,它对于Win7的类似)。我尝试过,但没有任何区别,实际上我只是增加了可用的最大大小,而且看起来好像Windows从不试图增加它所使用的页面文件的大小。
我现在正在研究这是由内存限制引起的还是强加给Cygwin引起的。要检查“强加于”,我试图以管理员权限运行Cygwin。要检查“内部”(看起来更可能),我正在玩Cygwin's maximum memory settings。
编辑3:尽管我可能更喜欢使用Cygwin,但事实证明,Windows Git客户端处理内存问题就好了。当我的存储库需要整理时,似乎我会经常回到这个问题。
也许暂时添加比生活更大的交换文件,并在其他地方喝几杯咖啡会有所帮助?
如果我不”今天晚上我会得到任何地方,我将重新启动我的电脑,并在今天晚上留下一个巨大的页面文件,并让它一夜之间... –
哦,我没有意识到你在windows上 - 我认为添加交换文件是一个在shell中的一些命令的问题。那么,我希望它仍然可以在Windows上,但你知道如何做到这一点;-) –
没有运气。事实上,我增加了可用的页面文件空间,但Windows并未决定使用它,这意味着可能存在一些Cygwin内存限制问题。我现在正在调查... –
,你可能会想尝试限制比默认值低一些其他的配置选项包括:
pack.packSizeLimit
core.packedGitWindowSize
core.packedGitLimit
......所有这一切都是记录在git config
documentation。特别值得一提的是,在每种情况下都要检查哪些单位是可以理解的,我过去犯过错误。
没有'core.deltaCacheSize'。我怀疑你指的是'pack.deltaCacheSize',我已经调整过了。不过,我现在试试其余的,谢谢! –
@me_and:oops - 我从我的回答中删除了那一个 –
没有运气。我将用我使用的新配置更新这个问题,但简短的版本是,你所建议的任何更改似乎都不会影响'git gc'试图分配的内存量。 –
我有同样的问题,尝试迄今未提及的解决方案。但我的问题git的GC开始后,我加入大图像文件回购,所以我创建.gitattributes文件,并关闭了那些大文件的增量压缩:
*.tga -delta
*.psd -delta
它的工作。
ZOMG它的工作!我一直在共享主机上的git存储库中遇到大型文件的问题,这些文件会占用太多内存。这解决了一个我已经存在的问题:DDDD – scone
经过大量的试验和错误,有时让它工作,然后在几次提交后再次破产,这带来了解决方案(迄今为止)。我认为这个答案应该更高。 –
,以帮助避免主机共享Linux的这个错误的唯一的事情是添加
[pack]
packSizeLimit = 64m
threads = 1
到
.gitconfig
最重要的是 “线程= 1”
我对Windows Git客户端的体验一般认为他们处理内存管理的情况更糟糕 - 我已经能够让Cygwin Git处理一个约15,000个提交SVN存储库的Windows Git客户端,我尝试将其禁用。不过,值得一试,我想! –
Whee!就像我可能不喜欢正常使用Windows Git客户端一样,工作得很好。谢谢! –