Git post接收挂钩未启动外部脚本



以下是我迄今为止所做的工作:

  1. 我有一个服务器,托管网站及其git存储库
  2. 我有一个名为git的用户,他拥有所有的转发,并且可以作为任何用户登录,而无需输入密码
  3. 我在repo的hooks目录中创建了一个名为post-receive的钩子
  4. 我还创建了一个名为gitpull的脚本,它可以自动将信息拉到网站上

当我键入以下命令时,一切都很好:

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
    

如何解决此问题?我做错了什么?

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

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


不是这样吗?

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

最新更新