这是我到目前为止所做的事情:
git
的用户拥有所有存储库,并且能够以任何用户身份登录而无需输入密码。post-receive
目录中创建了一个名为hooks
的钩子。gitpull
的脚本,可以自动将信息提取到网站。一切都是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
我该如何解决这个问题?我做错了什么?
答案 0 :(得分:2)
post-receive
挂钩需要标记为可执行文件,否则git不会运行它。当您使用sh -c
进行测试时,您将绕过执行权限检查。
我敢打赌,如果你运行chmod a+x /git/sitename.git/hooks/post-receive
,它就会起作用。
所以不是吗,嗯?
哦,su
在你运行密码时会提示输入密码,不是吗?您无法为挂钩提供输入,因此您需要确保可以将/git/sitename.git/hooks/post-receive
作为普通用户帐户自行输入,并让它在没有任何交互的情况下运行。