【发布时间】:2012-11-08 20:18:40
【问题描述】:
我正在 Windows 主机上设置 Git 服务器。我已经安装了最新的 Apache,并让它与 msysGit 一起工作。我根本没有使用 SSH;我可以通过 HTTP 推送和拉取。
现在我想添加一个接收后挂钩来通知我的构建服务器,但我不知道该怎么做。我在服务器的存储库中看到了示例挂钩脚本,但我对在那里做什么感到困惑。我是在其中放置一个名为 post-receive.bat 的 Windows 批处理文件,还是执行其他操作?
我对这一切的细节有点模糊,但是当 Apache 看到 Git URL 时,它正在执行 c:\Program Files\git\libexec\git-core\git-http-backend.exe。 git-http-backend.exe 会触发 post-receive 钩子吗?
更新
我越来越近了。这是我的钩子,在我的仓库中的hooks/post-receive:
#!/c/Program Files/Git/bin/sh
curl http://mybuildserver:8080/job/Whazzup/build
我从#!/bin/sh 更改了shebang,因为在Windows 上我没有。现在在 Apache 错误日志中,我收到消息 error: cannot spawn hooks/post-receive: No such file or directory
顺便说一句,Git bash 的 chmod 似乎不起作用。但是通过重命名示例文件,我能够获得post-receive 到rwxr-xr-x 的权限。
更新
我将 shebang 行改回 #!/bin/sh,但在 Apache 错误日志中仍然出现相同的错误:error: cannot spawn hooks/post-receive: No such file or directory。作为测试,我在 hooks 文件夹中打开了一个 Git bash 提示符,并使用 ./post-receive 执行了该钩子,并且成功了。
更新 现在我想知道我是否有其他问题。听从 VonC 的建议,我尝试在我自己的帐户下从命令行运行 Apache httpd,而不是作为 LocalSystem 下的服务。还是一样的。推拉工作正常,但钩子不执行。然后我试着让 Apache 脱离这个等式。在与 repo 相同的计算机上,我从 Git bash 提示符进行了克隆(通过文件系统)、修改、提交和推送。但是钩子仍然没有执行。
更新 好的,我的钩子脚本中有一个愚蠢的问题,但现在至少当我从同一台计算机(通过文件系统)推送到 repo 时它会执行。但不是当我推动 Apache 时。 Apache 现在在一个普通帐户下运行,并且 Apache 帐户可以完全控制存储库。 push 工作正常,但 post-receive 挂钩不执行。
【问题讨论】:
-
您应该将 shebang 保留为
#!/bin/sh:它会起作用。这是在 msysgit bash 会话中执行的。 -
谢谢。在问题中查看我的更新。
-
我已经编辑了我的答案以包括您的错误消息的可能解决方案
-
奇怪。它可能与可执行位有关(Windows 不支持,如stackoverflow.com/questions/9414942/…
标签: msysgit