Git Post-Receive Hook未被激活

时间:2012-08-21 16:46:05

标签: git

我的EC2 Amazon Linux Development服务器上有一个git repo。我正在使用SSH在我的笔记本电脑上推送来自我本地git仓库的更改。

我已确认推送工作正常,因为我的本地存储库的内容已在Dev服务器上镜像。但似乎我的接收后挂钩没有开火。因为代码没有被检出到我的html目录。

我甚至尝试使用echo命令至少确认钩子正在触发但是命令行中没有反馈,除了本地端的推送结果。

#!/bin/sh
#
# An example hook script for the "post-receive" event.
#
# The "post-receive" script is run after receive-pack has accepted a pack
# and the repository has been updated.  It is passed arguments in through
# stdin in the form
#  <oldrev> <newrev> <refname>
# For example:
#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b7$
#
# see contrib/hooks/ for a sample, or uncomment the next line and
# rename the file to "post-receive".

#. /usr/share/git-core/contrib/hooks/post-receive-email
GIT_WORK_TREE=/var/www/html sudo git checkout -f

3 个答案:

答案 0 :(得分:0)

sudo可能不会保留GIT_WORK_TREE环境变量 - 它经常被配置为为其运行的命令提供已清理的环境,尤其是当它们以root运行时。 git有一些命令行参数(具体为--git-dir--work-tree),它们完成环境变量的目的。在这种情况下,您可能需要使用它们。

答案 1 :(得分:0)

我不知道这是否可以帮助您解决云服务器问题,但我不得不手动编辑/ etc / fstab文件。我的/ srv / git文件夹符号链接到一个硬盘驱动器,它通过fstab文件使用'noexec,user'命令安装。将其更改为“默认值”终于解决了我的问题。我花了8个小时来搞清楚。 你也可以试试

$cd /path/to/.git/hooks
$sudo chown git:git post-receive

用于收件后文件。

答案 2 :(得分:0)

试试这个:

  1. 不要忘记带有--shared选项的init repo:

    $ git init --shared --bare repo / html.git

    $ sudo chgrp -R git repo / html.git

    $ sudo usermod -a -G git www-data

  2. 将Git用户添加到sudoers(允许www-data用户使用nopass):

    $ sudo visudo

    默认值:git!authenticate

    git ALL =(www-data)NOPASSWD:/ usr / bin / git

  3. 我们的单线收发后:

    sudo -u www-data git --git-dir = / home / git / repo / html.git / --work-tree = / var / www / html checkout -f