在我的远程盒子上,我初始化了一个裸git存储库。在hooks目录中,我使用以下脚本初始化了post-receive,post-update和update hooks:
#!/bin/bash
echo $0 $@ >> /tmp/githooks.log
在我的本地方框中,我克隆了存储库,添加了一个测试文件,提交了它并将更改推回到远程框。
$ git clone https://remote/git/sandbox.git sandbox
$ cd sandbox
$ touch asdf
$ git add asdf
$ git commit -a
[master (root-commit) 37505de] zxcv
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 asdf
$ git push origin master
Fetching remote heads...
refs/
refs/heads/
refs/tags/
updating 'refs/heads/master'
from 0000000000000000000000000000000000000000
to 37505de9c22b0aee84e0071190f4f58728770675
sending 3 objects
done
Updating remote server info
To https://remote/git/sandbox.git
* [new branch] master -> master
但是,远程计算机上的/tmp/githooks.log为空。但是,如果我在远程计算机上克隆存储库,则会成功调用挂钩。
git hook不能用于http-push吗?
答案 0 :(得分:8)
使用 Git protocols ,您将启用不同的功能 对于HTTP,this thread总结了问题:
这里的“问题”(这与HTTP协议的设计方式非常相似)是它不是 git 在push上更新远程端的存储库(它知道钩子) ),但 Web服务器通过WebDAV 并且Web服务器对钩子一无所知。
当“智能”HTTP协议实现时(当前处于设计阶段,我认为只是在设计协议之后),这可能会得到改善。
正如您所评论的那样, smart http 就是答案。
此功能称为“智能”HTTP与“哑”HTTP,因为它需要在服务器上安装Git二进制文件,之前的HTTP传输只需要一个简单的Web服务器。 它与客户进行了真实的对话,而不仅仅是愚蠢地推出数据。