Git post-receive hook没有触发外部脚本

时间:2012-11-01 14:31:17

标签: git bash hook

这是我到目前为止所做的事情:

  1. 我有一台托管网站及其git存储库的服务器。
  2. 我有一个名为git的用户拥有所有存储库,并且能够以任何用户身份登录而无需输入密码。
  3. 我在我的仓库的post-receive目录中创建了一个名为hooks的钩子。
  4. 我还创建了一个名为gitpull的脚本,可以自动将信息提取到网站。
  5. 一切都是O.K.当我输入此命令时:

    su - git -c "/git/sitename.git/hooks/post-receive"
    

    但是当我从开发机器上推送一些内容时,它不会运行脚本gitpull

    以下是我的文件:

    • /etc/gitpull

      #!/bin/bash
      su - $1 -c "cd ~/www;git pull;"
      
    • /git/sitename/hooks/post-receive

      #!/bin/bash
      /etc/gitpull sitename
      

    我该如何解决这个问题?我做错了什么?

1 个答案:

答案 0 :(得分:2)

post-receive挂钩需要标记为可执行文件,否则git不会运行它。当您使用sh -c进行测试时,您将绕过执行权限检查。

我敢打赌,如果你运行chmod a+x /git/sitename.git/hooks/post-receive,它就会起作用。


所以不是吗,嗯?

哦,su在你运行密码时会提示输入密码,不是吗?您无法为挂钩提供输入,因此您需要确保可以将/git/sitename.git/hooks/post-receive作为普通用户帐户自行输入,并让它在没有任何交互的情况下运行。