37

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

我有一个大型的本地 Git 存储库,git svn clone一个 SVN 存储库,大约有 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

我在具有 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

关于如何git访问gc我的存储库的任何建议?

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

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

编辑 2Michael Krelin 建议增加交换/页面文件大小(此处为WinXP 说明,与 Win7 类似)。我试过了,但没有任何区别,实际上我只是增加了可用的最大大小,而且看起来 Windows 从未尝试增加它正在使用的页面文件的大小。

我现在正在研究这是否是由于 Cygwin 内部的内存限制或强加于 Cygwin 造成的。要检查“强加于”,我正在尝试以管理员权限运行 Cygwin。为了检查“内部”(看起来更有可能),我正在玩Cygwin 的最大内存设置

编辑 3:虽然我可能更喜欢使用 Cygwin,但事实证明 Windows Git 客户端可以很好地处理内存问题。似乎当我的存储库需要整理时,我会经常退回到那个位置。

4

5 回答 5

12

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

*.tga -delta
*.psd -delta

有效。

于 2011-12-31T05:47:58.283 回答
7

运行原生 Windows 客户端(例如msysGit)可能比尝试在 Cygwin 中执行它更幸运。

于 2011-11-21T17:17:23.303 回答
6

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

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

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

于 2011-11-21T16:09:28.197 回答
4

唯一有助于避免在共享 Linux 主机上出现此错误的方法是添加

  [pack]
    packSizeLimit = 64m
    threads = 1

.gitconfig

最重要的是“线程= 1”

于 2013-05-10T23:42:01.660 回答
1

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

于 2011-11-21T15:48:20.560 回答