接下来我可以做什么来调试git update hooks没有触发?

时间:2015-09-17 16:06:07

标签: git

我正在尝试在git存储库上设置“服务器端”更新挂钩,但是当收到推送时我无法触发“更新”挂钩。

由于各种原因,客户必须通过Smart-HTTP协议访问repo,这似乎完全适用于克隆/拉/推操作。

根据文档,更新挂钩应该“为推送器试图更新的每个分支运行一次”,但我看不到任何证据表明它正在运行。

我创建了一个测试更新脚本,如下所示:

[root@centos hooks]# ls -al /opt/git/sdl.git/hooks/update
-rwxr-xr-x 1 apache apache 150 Sep 17 16:12 /opt/git/sdl.git/hooks/update

出于测试目的,脚本的内容是:

#!/bin/sh
echo "$0" > /tmp/update.out
exit 0

所以运行它应该在/tmp中创建一个文件(当我以apache用户身份运行它时它会这样做)但是当我执行测试推送到repo时,推送成功但是钩子没有创建文件。我已尝试过类似的事情用于预接收和后接收挂钩,它们似乎也没有工作。

接收服务器(Centos 7)正在运行git v1.8.3.1,推送客户端是v1.9.1,所以他们应该使用智能HTTP(Apache日志表明他们正在使用正确的URL)。这些权限看起来适用于钩子脚本,所以我在下一步看起来有点不知所措。

非常感谢任何帮助或想法。

1 个答案:

答案 0 :(得分:0)

提供Smart-HTTP访问的git http-backend启用“git-receive-pack调用钩子”。

由于您可以通过Smart-HTTP-setup访问您的存储库,我假设git-recieve-package正在调用您的钩子脚本。我进一步假设这个调用是由apache - 用户完成的(我仍在搜索该假设的来源),这个apache-user可能无法写入tmp目录。

请确保git-daemon-user有权写入/tmp - 目录或您为钩子脚本创建的特定文件/目录。