我正在尝试在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)。这些权限看起来适用于钩子脚本,所以我在下一步看起来有点不知所措。
非常感谢任何帮助或想法。
答案 0 :(得分:0)
提供Smart-HTTP访问的git http-backend启用“git-receive-pack调用钩子”。
由于您可以通过Smart-HTTP-setup访问您的存储库,我假设git-recieve-package正在调用您的钩子脚本。我进一步假设这个调用是由apache
- 用户完成的(我仍在搜索该假设的来源),这个apache-user可能无法写入tmp目录。
请确保git-daemon-user有权写入/tmp
- 目录或您为钩子脚本创建的特定文件/目录。