【发布时间】:2012-01-03 02:24:05
【问题描述】:
最终更新和修复:这里的解决方案是两件事的结合:使用 Windows Git 而不是 Cygwin Git 作为Graham Borland suggested,以及 Git 配置设置pack.threads = 1 和gc.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
我在具有 4GB RAM 的 64 位双核 Win7 机器上在 Cygwin 中运行 Git 1.7.5.1。 .git 目录目前略大于 6.1GB。
我已经尝试运行git gc --aggressive,看看是否有更完整的系统能够修复它,但没有运气:我收到与上述类似的消息,尝试使用相同大小的malloc,但相当大更高的对象计数(计数为 508,485,压缩为 493,506)。
按照 Google 的建议,我还尝试了对我的 .gitconfig 文件的 [pack] 部分进行的各种旋转;最完整的来自another StackOverflow question。我的.gitconfig 现在有以下相关行,但设置这些似乎没有任何区别:
[pack]
windowMemory = 16m
threads = 1
window = 1
depth = 1
deltaCacheSize = 1
关于如何将git 转到gc 我的存储库有什么建议吗?
编辑:Mark Longair suggested 更多.gitconfig 文件更改。我做的,下面有新的行。但是这些变化没有任何区别。
[core]
packedGitWindowSize = 1m
packedGitLimit = 256m
[pack]
packSizeLimit = 128m
编辑2:Michael Krelinsuggested增加交换/页面文件大小(WinXP指令here,Win7类似)。我试过了,但没有任何区别,实际上我只是增加了可用的最大大小,而且看起来 Windows 从未尝试增加它正在使用的页面文件的大小。
我现在正在研究这是由 Cygwin 内部的内存限制引起的还是强加于 Cygwin 的。要检查“强加于”,我正在尝试以管理员权限运行 Cygwin。为了检查“内部”(看起来更有可能),我正在玩 Cygwin's maximum memory settings。
编辑 3:虽然我可能更喜欢使用 Cygwin,但事实证明 Windows Git 客户端可以很好地处理内存问题。似乎当我的存储库需要整理时,我会经常使用它。
【问题讨论】: