Git推送HTTP不激活远程钩子

时间:2010-12-07 00:26:10

标签: git webdav

在我的远程盒子上,我初始化了一个裸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吗?

1 个答案:

答案 0 :(得分:8)

使用 Git protocols ,您将启用不同的功能 对于HTTP,this thread总结了问题:

  

这里的“问题”(这与HTTP协议的设计方式非常相似)是它不是 git 在push上更新远程端的存储库(它知道钩子) ),但 Web服务器通过WebDAV   并且Web服务器对钩子一无所知。

     

当“智能”HTTP协议实现时(当前处于设计阶段,我认为只是在设计协议之后),这可能会得到改善。

正如您所评论的那样, smart http 就是答案。

alt text

  

此功能称为“智能”HTTP与“哑”HTTP,因为它需要在服务器上安装Git二进制文件,之前的HTTP传输只需要一个简单的Web服务器。   它与客户进行了真实的对话,而不仅仅是愚蠢地推出数据。