我在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 repo时,推送成功并更新了git repo。但是,后接收挂钩不会运行。如果我手动运行钩子,它运行正常并更新工作目录。
git push通过SSH执行并使用相同的用户,就像我手动运行挂钩一样。
为什么钩子不能自动运行的任何想法?
感谢。
答案 0 :(得分:3)
我已经设置了一个本地相同的测试(即我从本地文件夹克隆),它工作正常。
要查看脚本是否完全执行,我添加了一个简单的触摸来查看它是否修改了任何文件
我的收件后看起来像这样
#!/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
,否则无效。