Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git Post接收挂钩未激活_Git - Fatal编程技术网

Git Post接收挂钩未激活

Git Post接收挂钩未激活,git,Git,我的EC2 Amazon Linux开发服务器上有一个git repo。我正在使用SSH在我的笔记本电脑上推送来自本地git repo的更改 我已经确认推送工作正常,因为我的本地repo的内容在Dev服务器上镜像。然而,我的post接收钩似乎没有开火。因为代码没有签出到我的html目录 我甚至尝试发出一个echo命令,以至少确认钩子正在发射,但命令行中没有反馈,除了本地端的推送结果 #!/bin/sh # # An example hook script for the "post-receiv

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

我已经确认推送工作正常,因为我的本地repo的内容在Dev服务器上镜像。然而,我的post接收钩似乎没有开火。因为代码没有签出到我的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
#/垃圾箱/垃圾箱
#
#“post receive”事件的钩子脚本示例。
#
#“接收后”脚本在接收包接受包后运行
#并且存储库已经更新。它是通过参数传入的
#格式中的stdin
#    
#例如:
#aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b7$
#
#有关示例,请参见contrib/hooks/,或取消注释下一行并
#将文件重命名为“接收后”。
#./usr/share/git core/contrib/hooks/post接收电子邮件
GIT_WORK_TREE=/var/www/html sudo GIT checkout-f

sudo
可能不会保留
GIT\u WORK\u TREE
环境变量-它经常被配置为为为它运行的命令提供一个净化的环境,特别是当它们以
根用户身份运行时
git
有一些命令行参数(
--git dir
--work tree
),它们完成了与环境变量相同的任务。在这种情况下,您可能需要使用它们。

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

$cd /path/to/.git/hooks
$sudo chown git:git post-receive
对于接收后文件。

请尝试以下操作:

  • 不要忘记使用--shared选项初始化回购:

    $git init--共享--裸repo/html.git

    $sudo chgrp-R git repo/html.git

    $sudo usermod-a-G git www-data

  • 将Git用户添加到sudoers(允许www数据用户使用nopass):

    $sudo visudo

    默认值:git!鉴定

    git ALL=(www数据)NOPASSWD:/usr/bin/git

  • 我们的单线柱接钩:

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


  • 我尝试了另一个不需要使用SUDO的目录,得到了相同的结果。我甚至不确定钩子是否正在触发,因为我使用echo命令时没有输出。你是否按照注释中的建议重命名了钩子脚本?这似乎很明显,但值得一问。。。另外,脚本是否设置为可执行?我已经删除了整个checkout命令,并用一个简单的echo语句替换它,并且使用chmod+x将其设置为可执行-rwxr-x 1 ec2用户ec2用户579 Aug 21 17:45 post receiveAs注:sudo在这里真是个坏主意。你应该调整工作树中的权限,让git运行的用户来处理结帐。是的,这是在扔东西,看它是否卡住。我和你一样有同样的问题。你解决了吗?我解决了,但我现在不确定我到底做了什么。