我的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
答案 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)
试试这个:
不要忘记带有--shared选项的init repo:
$ git init --shared --bare repo / html.git
$ sudo chgrp -R git repo / html.git
$ sudo usermod -a -G git www-data
将Git用户添加到sudoers(允许www-data用户使用nopass):
$ sudo visudo
默认值:git!authenticate
git ALL =(www-data)NOPASSWD:/ usr / bin / git
我们的单线收发后:
sudo -u www-data git --git-dir = / home / git / repo / html.git / --work-tree = / var / www / html checkout -f