【发布时间】:2013-02-02 01:30:27
【问题描述】:
我有一个托管在 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。但是,不会运行 post-receive 挂钩。如果我手动运行钩子,它会运行良好并更新工作目录。
git push 是通过 SSH 执行的,并且使用相同的用户,就像我手动运行钩子一样。
任何想法为什么钩子不会自动运行?
谢谢。
【问题讨论】:
-
它的设置几乎完全相同。唯一的区别是他的工作目录在 /var/www/html 中,而我的只是我家中的一个目录。不过,这应该没什么区别。钩子只需要一个名为 'post-receive' 的 shell 脚本并且是可写的,这是否正确?
-
钩子必须是可执行的。并且工作树必须存在于 Amazon EC2 实例上。
-
对不起,我的意思是可执行文件。它绝对是可执行的,因为我可以手动运行它。工作树位于 EC2 实例的主目录中。
-
检查它是否运行,并在其中包含一个简单的回显。也尝试指定
GIT_DIR(=/path/to/your/bare/repo) in addition ofGIT_WORK_TREE。 -
您确实在 Amazon EC2 端的
bare repo/hooks/post-receive中添加了它,对吧? (不仅仅是在本地机器上的本地 repo 上进行测试)。
标签: git amazon-ec2