16

从前几天开始,每次我在存储库中启动 Git GUI 时,它都会显示这个可怕的错误消息并在我单击 OK 后退出:

prepare-commit-msg hook failed:

      0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487
AllocationBase 0x0, BaseAddress 0x68560000, RegionSize 0x260000, State 0x10000
C:\Program Files (x86)\Git\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0

You must correct the above errors before committing.

它仅在 Git GUI 中发生,并且仅在存储库(旧的或新创建的)中发生。Git Bash 中的常用命令(包括提交)工作正常。

卸载并使用较新的软件包重新安装(仅次要版本更改)并没有解决问题。它仍然发生在旧存储库以及新创建的存储库中。

在干净的机器上,这个问题不会重现,所以我猜这是我的盒子上的东西,但我不记得安装了任何有趣的东西。我确实记得在很长一段时间后关闭了我的盒子,所以也许一些 Windows 更新可能触发了这个 - 这也可以解释为什么另一台机器不会受到影响 - 自上次 Win 更新以来已经 2-3 个月了。

任何想法如何阐明这一点?(因为我只能在单机上看到它,所以在我知道这不是我/其他应用程序的错之前,我不想将它提交给官方跟踪器......)


第一次评论后更新:

  • 如果您删除或重命名挂钩脚本,它是否有效?

    很有趣,但钩子脚本实际上根本不存在(没有钩子脚本存在——.git\hooks 中只有 *.sample 文件)。甚至在其他地方也没有(git 程序目录等)

  • 跟踪它,这样你就知道它运行了哪些命令——来自 git-bash rungit gui --trace

    可悲的是,这不会向外壳输出任何内容。行为是一样的。

  • 也许在那里得到gdb。

    我试过了,但 gdb 没有输出任何有用的东西。但是,我对 GDB 没有任何经验,我可能做错了。我得到了一个MinGW 的 gdb,从命令提示符运行它,并使用 git.exe 作为参数,然后运行run gui​​. gdb 没有输出任何有趣的东西:

    (gdb) run gui
    Starting program: C:\Program Files (x86)\Git\bin\git.exe gu
    [New Thread 8264.0x1ce4]
    [New Thread 8264.0x394]
    [Inferior 1 (process 8264) exited with code 01]
    (gdb)  
    

    但我几乎可以肯定我做错了,所以建议非常受欢迎:)

  • 确保您没有安装 cygwin,或者至少它根本不存在于您的 PATH 中

    我确实安装了 cygwin(就像我一直安装的那样,在 git 崩溃之前)。在 Cygwin 中,我在路径中只有一些 *.bat 启动器和一些 *.dll 文件,但我已经与 ProcMon 确认它没有触及它们,即使我将它们从路径中删除,我仍然会遇到同样的崩溃。

4

7 回答 7

10

这对我有用。

http://www.trinitycore.org/f/topic/5194-msysgit-couldnt-reserve-space-for-cygwins-heap/

解决方案:

更改 msysgit.dll 的基地址

c:\msysgit\bin>rebase.exe -b 0x50000000 msys-1.0.dll

于 2014-04-07T10:45:55.930 回答
9

我也遇到过这个问题

我已经解决了

http://support.code-red-tech.com/CodeRedWiki/VirtualAllocPointerNull

显然这是由某些功能引起的,替换 dll 可以为大多数人修复它

如果网站关闭 -


虚拟分配指针为空

在极少数情况下,运行 make 可能会导致类似于以下的错误:

0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487
AllocationBase 0x0, BaseAddress 0x71110000, RegionSize 0x350000, State 0x10000
\msys\bin\make.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0

这是一个影响极少数客户的问题,并且取决于他们同时运行的其他应用程序。

这是由我们用来为产品提供构建环境的 MSYS 二进制文件中的一个特性引起的。

如果发生这种情况,您可以将文件 \msys\bin\msys-1.0.dll 替换为附加 zip 文件中的文件。msys-1.0.zip

请注意,这并不能解决问题,而是移动 DLL 基地址。不幸的是,这个替换 DLL 也可能发生错误,这再次取决于正在运行的其他应用程序。


于 2013-05-20T17:13:59.647 回答
3

在另一个 Windows 更新和操作系统重新启动后,问题消失了。

似乎其中一个更新引入了一个已在另一个更新中修复的错误。或者它可能是一个“月相”错误。

我想我们永远不会知道...

于 2012-07-12T08:41:10.603 回答
3

我有同样的问题。对我有用的解决方案与 XandrGuard 建议的解决方案几乎相同

c:\msysgit\bin>rebase.exe -b 0x50000000 msys-1.0.dll

解决方案在这里解释http://jakob.engbloms.se/archives/1403

对我来说,解决方案略有不同。它是

C:\Program Files (x86)\Git\bin>rebase.exe -b 0x50000000 msys-1.0.dll

希望它可以帮助那些试图用谷歌搜索问题的人

于 2014-06-25T10:28:34.887 回答
3

我也遇到了这个问题,这是因为 MacType 干扰了 bash.exe 和 msys1.0.dll。(MacType 是一个用于 Windows 的字体平滑程序,它试图模拟 OS-X 样式字体光栅化。)仅在我需要它的程序上启用 MacType,而不是在试图加载 bash.exe 的 Console2 窗口上启用 MacType 解决了这个问题。

也许这会帮助其他人修复错误。

于 2013-11-04T16:48:47.090 回答
2

在 Win64 机器上安装 1.8.0 后,我遇到了同样的问题。我通过删除 1.8.0 并安装 1.7.11 解决了这个问题

于 2013-01-21T12:38:14.763 回答
1

msys-1.0.dll只需在您的驱动器上搜索所有内容C:\,然后将 Git 使用的内容放在第一位。

就我而言,我只是更改了以下顺序:

C:\prgs\Gow\Gow-0.7.0\bin\msys-1.0.dll
C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\msys-1.0.dll

通过使 Git 路径C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\在 my 中排在第一位%PATH%,错误消息消失了!

无需重新启动,甚至无需更改 DOS 会话。
一旦%PATH%在那个 DOS 会话中更新,git 命令就可以工作了。


旁注,关于 gdb:

随着 Git 2.25.2(2020 年 3 月)增加了更好的 gdb 调试体验。

请参阅Johannes Schindelin ( ) 的提交 08809c0(2020 年 2 月 13 日(由Junio C Hamano 合并 -- --提交 e154451中,2020 年 2 月 17 日)dscho
gitster

mingw: 添加辅助函数以将 GDB 附加到当前进程

签字人:约翰内斯·辛德林

在调试 Git 时,进程的交叉生成可能会使事情变得相当困难,尤其是当一个 Unix shell 脚本被混入调用 agit.exe然后段错误的混合中时。

为了帮助调试这些事情,我们引入了open_in_gdb()可以在发生段错误的代码位置(或尽可能接近)调用的函数;这将打开一个新的 MinTTY 窗口,其中包含已附加到当前进程的 GDB。

灵感来自 Derrick Stolee。

然后新功能open_in_gdb()有评论:

/*
 * For debugging: if a problem occurs, say, in a Git process that is spawned
 * from another Git process which in turn is spawned from yet another Git
 * process, it can be quite daunting to figure out what is going on.
 *
 * Call this function to open a new MinTTY (this assumes you are in Git for
 * Windows' SDK) with a GDB that attaches to the current process right away.
 */
于 2014-01-03T16:09:14.553 回答