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

me_*_*and 35 git git-svn git-gc

最终更新和修复:这里的解决方案结果是两件事:使用Windows Git而不是Grag Borland 建议的 Cygwin Git ,以及Git配置设置pack.threads = 1gc.aggressiveWindow = 150.

我有一个大型的本地Git存储库,一个git svn cloneSVN存储库,大约有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
Run Code Online (Sandbox Code Playgroud)

我正在使用4GB RAM的64位双核Win7机器上运行Cygwin中的Git 1.7.5.1.该.git目录目前略高于6.1GB.

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

我也尝试过 - 像谷歌一样建议的文件[pack]部分.gitconfig; 来自另一个StackOverflow问题的最完整的存在.我.gitconfig现在有以下相关的行,但设置这些似乎没有区别:

[pack]
        windowMemory = 16m
        threads = 1
        window = 1
        depth = 1
        deltaCacheSize = 1
Run Code Online (Sandbox Code Playgroud)

关于如何git进入gc我的存储库的任何建议?

编辑:Mark Longair 建议更多.gitconfig文件更改.我做了哪些,下面是新行.但这些变化没有任何区别.

[core]
        packedGitWindowSize = 1m
        packedGitLimit = 256m
[pack]
        packSizeLimit = 128m
Run Code Online (Sandbox Code Playgroud)

编辑2:Michael Krelin 建议增加交换/页面文件大小(此处为 WinXP指令,Win7类似).我试过了,但没有区别,事实上我只增加了可用的最大大小,看起来好像Windows从未试图增加它正在使用的页面文件的大小.

我现在正在研究这是由Cygwin内部限制还是强加于内存.要检查"强制执行",我正在尝试使用管理员权限运行Cygwin.要检查"内部"(看起来更有可能),我正在玩Cygwin的最大内存设置.

编辑3:虽然我可能更喜欢使用Cygwin,但事实证明Windows Git客户端处理内存问题很好.似乎当我的存储库需要整洁时,我会经常回到这一点.

and*_*iej 11

我有同样的问题,尝试了到目前为止提到的解决方案没有成功.但是在我将大图像文件添加到repo后,我的git gc问题就开始了,所以我创建了.gitattributes文件并为这些大文件关闭了delta压缩:

*.tga -delta
*.psd -delta
Run Code Online (Sandbox Code Playgroud)

有效.


Gra*_*and 7

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


Mar*_*air 5

您可能希望尝试限制为低于默认值的其他一些配置选项包括:

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

...所有这些都记录在git config文档中.在每种情况下特别值得检查哪些单位被理解,我过去曾犯过错误.