我无法使用msysgit(Windows 7 Pro / 32和Ultimate / 64)正确使用post-recieve和post-commit挂钩。对于post-commit钩子,如果我从git-bash或控制台提交,我会得到上面的错误,但是如果我通过git-gui提交它会正常工作。对于后接收钩子,所有三个都给出了相同的错误。
我认为这是某种权限或路径错误,但是没有任何线索从何处开始。
答案 0 :(得分:76)
将SHEBANG添加到第一行钩子中,如下所示:
#!/bin/sh
echo "executing post-commit"
exit 0
这让我感到困难了一段时间,我看到添加了shebang固定它。在SVN世界中,在* nix中我们有一个“预提交”脚本,在Windows中我们有“pre-commit.bat”,SVN自动在Windows中获取bat文件。 Git似乎没有拿起pre-commit.bat(或任何钩子)并将shebang添加到挂钩文件中。
答案 1 :(得分:5)
如果你有SHEBANG并且它仍然失败,请确保在路径环境变量中设置了<path_to_git>
\ bin。
如果您从命令行安装它,则可能还有<path_to_git>
\ cmd。
答案 2 :(得分:5)
我正在使用SourceTree和git LFS并遇到类似的问题:cannot spawn .git/hooks/pre-push
。
修复是删除pre-push
文件(打开它显示它已严重损坏)并重新启动SourceTree,此时它重新生成pre-push
文件,一切都恢复正常。
答案 3 :(得分:3)
这是一个老问题,但我一直在与这个确切的问题作斗争,这个问题突然出现了,所以我认为值得努力记录对我有用的东西。
简而言之:我需要以普通用户而不是Apache
的身份运行Local System
。这是我正在玩的遗留测试VM
,所以它只运行Windows XP
,但似乎至少在该平台上(可能还有其他人),msysgit
只是没有在Local System
帐户下运行时可能正常工作(可能是root filesystem
未正确映射)。因此,没有shebang行可以工作,因为git-http-backend根本无法执行任何msysgit二进制文件(即使使用绝对Windows
路径)。
将Apache切换为常规用户帐户可以完全解决此问题。显然,您需要确保Apache运行的用户具有read
/ write
git
个存储库的权限,但除此之外,请确保您的shebang
行是{ {1}}并且一切都应该是copacetic。
最后,是的,这是一把大锤子。理想情况下,您可以在#!/bin/sh
上使用suexec
之类的内容,但快速Windows
并不表示前进的明显路径。当然,如果有人有任何想法,我会感兴趣。
目前,这对我有用,但看起来并不理想。
答案 4 :(得分:2)
如果有人像我一样遇到通过apache访问git存储库的类似问题,你应该在Apache配置中设置PATH,如:
SetEnv PATH "c:/Program Files (x86)/Git/bin;"
答案 5 :(得分:2)
使用LFS将其保存在一个仓库中,并用git lfs update --force
摆脱了它
答案 6 :(得分:0)
使用tortoisegit和LFS,对我来说只需要删除.git / hooks文件夹中的文件。
答案 7 :(得分:0)
对我来说,删除shebang行前面的注释行可修复错误。奇怪的是,该脚本在shell上运行良好,只是在作为钩子运行时出错。
答案 8 :(得分:0)