我正在 Windows 主机上设置 Git 服务器。我已经安装了最新的 Apache,并让它与 msysGit 一起工作。我根本没有使用 SSH;我可以通过 HTTP 推送和拉取。
现在我想添加一个接收后挂钩来通知我的构建服务器,但我不知道该怎么做。我在服务器的存储库中看到了示例挂钩脚本,但我对在那里做什么感到困惑。我是放一个 Windows 批处理文件,命名为post-receive.bat
,还是做其他事情?
我对这一切在做什么的细节有点模糊,但是当 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
我改变了shebang,#!/bin/sh
因为在Windows上我没有。现在在 Apache 错误日志中,我收到了消息error: cannot spawn hooks/post-receive: No such file or directory
顺便说一句,Git bashchmod
似乎不起作用。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 帐户可以完全控制存储库。推送工作正常,但 post-receive 挂钩不执行。