msysgit钩子错误:“git错误:不能产卵.git /钩子/后提交:没有这样的文件或目录”

我遇到了麻烦得到post-recieve和post-commit挂钩与msysgitWindows 7 Pro / 32和Ultimate / 64)正常工作。 对于post-commit hook,如果我从git-bash或控制台提交,我会得到上面的错误,但是如果我通过git-gui提交,它会正常工作。 对于后接收钩,所有三个给出了相同的错误。

我认为这是某种权限或path错误,但并不知道从哪里开始。

将SHEBANG添加到钩子的第一行,如下所示:

#!/bin/sh echo "executing post-commit" exit 0 

这也让我难住了一段时间,而且我看到加入了这个修改。 在SVN世界里,在* nix中我们有一个“pre-commit”脚本,而在Windows中我们有“pre-commit.bat”,SVN自动在Windows中拾取bat文件。 Git似乎没有拿起pre-commit.bat(或任何钩子),并将shebang添加到工作的钩子文件。

我正在使用SourceTree和git LFS,并且有类似的问题: cannot spawn .git/hooks/pre-push

解决的办法是删除pre-push文件(打开它显示已严重损坏),然后重启SourceTree,重新生成pre-push文件,一切恢复正常。

如果你有SHEBANG,但仍然失败,请确保在路径环境变量中设置了<path_to_git> \ bin。

如果您通过命令行安装了<path_to_git> \ cmd,则可能还会有<path_to_git> \ cmd。

这是一个古老的问题,但我一直在与这个确切的问题斗争,这个问题突然出现,所以我认为值得努力记录什么对我有用。

简而言之:我需要以普通用户身份运行Apache ,而不是Local System 。 这是在我正在玩的传统测试VM ,所以它只是运行Windows XP ,但似乎至少在该平台(可能还有其他), msysgit只是在Local System帐户下运行时无法正常工作(据推测root filesystem没有正确映射)。 因此,没有shebang行将作为git-http-backend无法执行任何msysgit二进制文件(即使是绝对Windows路径)。

切换Apache以普通用户帐户运行完全解决了这个问题。 很明显,你需要确保用户Apache有权限read / write git仓库,但除此之外,只要确保你的shebang行是#!/bin/sh ,一切都应该是协同的。

最后,是的,这是一个大锤子。 理想情况下,你可以在Windows上使用像suexec这样的东西,但是一个快速的googling并不意味着一个明显的路径。 当然,如果有人有任何想法,我会感兴趣。

目前来看,这对我很有用,但看起来并不理想。

如果像我这样的人遇到类似的问题,通过Apache访问git仓库,你应该在Apache配置中设置PATH,如:

 SetEnv PATH "c:/Program Files (x86)/Git/bin;"