【发布时间】:2012-07-10 18:36:21
【问题描述】:
从几天前开始,每次我在仓库中启动 Git GUI 时,它都会显示这个可怕的错误信息,并在我单击确定后退出:
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 个月了。
任何想法如何阐明这一点? (因为我只能在单机上看到它,所以在我知道这不是我/其他应用程序的错之前,我不想将其提交给官方跟踪器......)
更新在第一次 cmets 之后:
-
如果你删除或重命名钩子脚本,它会起作用吗?
够好笑,但是钩子脚本实际上根本不存在(没有钩子脚本 存在——.git\hooks 中只有 *.sample 文件)。甚至在其他地方也没有(git程序 目录等)
-
跟踪它,以便您知道它运行了哪些命令 - 从 git-bash 运行
git gui --trace遗憾的是,这不会向 shell 输出任何内容。行为是一样的。
-
也许可以把 gdb 放进去。
我试过了,但 gdb 没有输出任何有用的东西。但是,我没有任何经验 使用 GDB,我可能做错了。我有一个MinGW's 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 或至少它不存在于您的 路径
我确实安装了 cygwin(就像我一直安装的那样,在 git 崩溃之前)。从 Cygwin 我只 在路径中有一些 *.bat 启动器和一些 *.dll 文件,但我已经检查过 ProcMon 它不会触及它们,即使我将它们从路径中删除,我仍然会得到 同样的崩溃。
【问题讨论】:
-
如果您删除或重命名挂钩脚本,它是否有效?
.git/hooks/prepare-commit-msg -
跟踪它,以便您知道它运行了哪些命令 - 从 git-bash 运行
git gui --trace。当它运行 prepare-commit-hook 时,它将发出它运行的命令,您可以查看该命令以获取更多调试信息。也许在那里得到gdb。它抱怨 cygwin 堆的事实是可疑的。确保您没有安装 cygwin,或者至少它根本不存在于您的 PATH 中。 cygwin 和 msys 不能混用。 -
@patthoyts, fork0 感谢指点,更新了 Q 的回复
-
我现在看到了与 msysgit.googlecode.com/files/Git-1.8.3-preview20130601.exe 类似的问题 -- github.com/msysgit/msysgit/issues/123 。但我没有更多有用的信息。
-
@imz--IvanZakharyaschev 我不敢相信我忘记在 Q 中添加版本并且侥幸逃脱。 ;) 不幸的是,我不能回来查看,我已经在另一家公司工作了。我猜测它是当时在 googlecode 页面上稳定可用的东西(不确定是否为 1.8*)