钩子的msysgit错误:“git错误:无法生成.git / hooks / post-commit:没有这样的文件或目录”

时间:2011-04-17 23:34:58

标签: windows git msysgit

我无法使用msysgit(Windows 7 Pro / 32和Ultimate / 64)正确使用post-recieve和post-commit挂钩。对于post-commit钩子,如果我从git-bash或控制台提交,我会得到上面的错误,但是如果我通过git-gui提交它会正常工作。对于后接收钩子,所有三个都给出了相同的错误。

我认为这是某种权限或路径错误,但是没有任何线索从何处开始。

9 个答案:

答案 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)

如果您使用的是Android Studio,则可以通过取消选中“运行Git挂钩”复选框来消除此错误:

Un-check the checkbox "Run Git hooks", this will solve your problem