【问题标题】:Git post-receive hook not running following pushGit post-receive 钩子在推送后未运行
【发布时间】: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 of GIT_WORK_TREE
  • 您确实在 Amazon EC2 端的 bare repo/hooks/post-receive 中添加了它,对吧? (不仅仅是在本地机器上的本地 repo 上进行测试)。

标签: git amazon-ec2


【解决方案1】:

我已经设置了一个本地相同的测试(即我从本地文件夹克隆)并且它工作正常。

为了查看脚本是否被执行,我添加了一个简单的触摸来查看它是否修改了任何文件

我的后期接收是这样的

#!/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,否则它将不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-19
    • 2011-04-15
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    相关资源
    最近更新 更多