1

我的 EC2 Amazon Linux 开发服务器上有一个 git 存储库。我正在使用 SSH 从笔记本电脑上的本地 git 存储库推送更改。

我已确认推送工作正常,因为我的本地 repo 的内容已镜像到开发服务器上。但是,我的接收后挂钩似乎没有触发。因为代码没有被检出到我的 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
4

3 回答 3

0

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

于 2012-08-21T17:08:21.997 回答
0

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

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

用于接收后文件。

于 2012-08-26T22:15:45.160 回答
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 用户不通过):

    $ sudo visudo

    默认值:git !authenticate

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

  3. 我们的单行 post-receive hook:

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

于 2013-01-10T23:22:47.237 回答