Git提交后钩子无法在推送后运行

3

我有一个托管在Amazon EC2实例上(运行Ubuntu 12.04)的网站。我想要能够使用git推送更改到服务器,然后使用post-receive钩子在工作目录中进行检出。因此,在服务器上的hooks目录中,我有一个名为post-receive的文件,其中包含:

#!/bin/sh
GIT_WORK_TREE=/home/ubuntu/beta git checkout -f

文件的权限为:-rwxrwxr-x(即可执行)。
在我的本地机器上,当我将代码推送到服务器上的git仓库时,推送成功并更新了git仓库。然而,post-receive钩子没有运行。如果我手动运行钩子,它会正常运行并更新工作目录。
git push是通过SSH进行的,并使用与手动运行钩子相同的用户。
有任何想法为什么钩子不会自动运行吗?
谢谢。

它的设置基本上完全相同。唯一的区别是他的工作目录在/var/www/html中,而我的只是在我家的一个目录中。虽然这不应该有任何影响。钩子只需要一个名为'post-receive'的shell脚本并且可写,这正确吗? - user2080608
钩子必须是可以执行的,并且工作树必须存在于 Amazon EC2 实例上。 - VonC
抱歉,我指的是可执行文件。它肯定是可以运行的,因为我可以手动运行它。工作树位于 EC2 实例的主目录中。 - user2080608
1
你确保将其添加到了 Amazon EC2 端的 bare repo/hooks/post-receive 中,对吗?(而不仅仅是在本地机器上的本地仓库中进行测试添加)。 - VonC
你能确保它在正确的文件夹里吗? - manojlds
显示剩余3条评论
1个回答

3
我已经设置了一个本地相同的测试环境(即我从本地文件夹克隆),它可以正常工作。
为了查看脚本是否被执行,我添加了一个简单的touch命令来查看它是否修改了任何文件。
我的post-receive文件如下:
#!/bin/sh

touch /Users/raven/git_tests/live/.git/hooks/i_ve_been_run
GIT_WORK_TREE=/Users/raven/git_tests/live git checkout -f

确保你的钩子命名为post-receive,否则它将不起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接