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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/8214321/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 06:11:02  来源:igfitidea点击:

Git gc using excessive memory, unable to complete

gitgit-svngit-gc

提问by me_and

Final update and fix: The solution here turned out to be a combination of two things: using Windows Git rather than Cygwin Git as Graham Borlandsuggested, and the Git config settings pack.threads = 1and gc.aggressiveWindow = 150.

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

I have a large local Git repository, a git svn cloneof an SVN repository with about 40,000 commits. I'm trying to run git gcover this repository, and getting nowhere:

我有一个大型的本地 Git 存储库,一个git svn clone有大约 40,000 次提交的 SVN 存储库。我试图运行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

I'm running Git 1.7.5.1 inside Cygwin on a 64-bit dual-core Win7 machine with 4GB RAM. The .gitdirectory is currently a little over 6.1GB.

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

I've tried running git gc --aggressive, to see if the more complete system is able to fix it, but no luck: I get a similar message to the above, with the same size attempted malloc, but a considerably higher object count (508,485 counted, 493,506 compressed).

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

I've also tried—as suggested by Google—assorted twiddles to the [pack]part of my .gitconfigfile; the most complete being from another StackOverflow question. My .gitconfignow has the following relevant lines, but setting these appears to have made no difference:

我也试过——按照谷歌的建议——[pack]对我的.gitconfig文件部分进行分类;最完整的来自另一个 StackOverflow 问题。我.gitconfig现在有以下相关行,但设置这些似乎没有什么区别:

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

Any suggestions on how I can get gitto gcmy repository?

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

Edit: Mark Longairsuggestedsome more .gitconfigfile changes. Which I made, new lines below. But the changes made no difference whatsoever.

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

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

Edit 2: Michael Krelinsuggestedincreasing the swap/page file size (WinXP instructions here, and it's similar for Win7). I tried that, but it made no difference, and indeed I only increased the maximum size available, and it looks as if Windows never tried to increase the size of the page file it was using.

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

I'm now looking at whether this was caused by a memory limit within or imposed upon Cygwin. To check "imposed upon", I'm trying running Cygwin with administrator privileges. To check "within" (which looks more likely), I'm having a play with Cygwin's maximum memory settings.

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

Edit 3: Much though I may prefer using Cygwin, it turns out the Windows Git client deals with the memory issue just fine. Seems I'll be falling back to that every so often when my repository needs a tidy.

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

采纳答案by Graham Borland

You might have more luck running a native Windows client such as msysGit, rather than trying to do it inside Cygwin.

运行本机 Windows 客户端(例如msysGit ),而不是尝试在 Cygwin 中执行它,您可能会更幸运。

回答by andriej

I had the same problem, tried the solutions mentioned so far without success. But my problems with git gc began after I added big image files to repo, so I created .gitattributes file and turned off delta compression for those big files:

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

*.tga -delta
*.psd -delta

It worked.

有效。

回答by Mark Longair

Some other config options that you might want to try restricting to lower than default values include:

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

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

... all of which are documented in the git configdocumentation. It's particularly worth checking in each case what units are understood, which I've made mistakes with in the past.

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

回答by Alex

The only thing that help to avoid this error on shared Linux hosting was to add

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

  [pack]
    packSizeLimit = 64m
    threads = 1

to

.gitconfig

Most important was "threads = 1"

最重要的是“线程数 = 1”

回答by Michael Krelin - hacker

Maybe temporarily adding a swap file bigger than life and going for a few cups of coffee elsewhere will help?

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