以下是我迄今为止所做的工作:
- 我有一个服务器,托管网站及其git存储库
- 我有一个名为
git
的用户,他拥有所有的转发,并且可以作为任何用户登录,而无需输入密码 - 我在repo的
hooks
目录中创建了一个名为post-receive
的钩子 - 我还创建了一个名为
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
本身键入为您的普通用户帐户,并在没有任何交互的情况下运行它。