从本地存储库推送到远程存储库后,挂钩后接收不起作用

问题描述 投票:1回答:1

问题描述:

我在git仓库中自动启动post-receive钩子时遇到问题。从本地存储库推送到远程存储库后,钩子post-receive只是不执行。


我执行的步骤:

  1. 我在本地计算机上创建(non-bare)存储库并创建多个提交
  2. 我在远程计算机(bare)上创建一个存储库,在此处创建post-receive钩子并将其设置为chmod到755
  3. 在本地计算机上,我添加一个远程存储库(git remote add .....)
  4. 我进行了正确运行的推送
  5. 不幸的是,钩子不开火

我的环境:

  • 本地计算机:GIT 2.25.0.windows.1 @ Win10 (1909)
  • 远程机器:GIT 2.25.0 @ Debian 8.11 (jessie)

远程计算机上接收文件的内容:

#!/bin/sh
git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f

  • 注意:当我直接从ssh控制台运行此代码时,它工作正常

其他SO解决方案?:

是,我看过很多东西,但是没有一个能解决我的问题。我已经看到一些有关“未设置GIT_DIR”建议的答案,但恐怕与它无关,因为即使echo test > log.txt也不能在post-receive中使用。看来post-receive无法启动?

git localhost remote-server githooks git-post-receive
1个回答
0
投票

确定,我发现了问题所在-主机上的分区安装为noexec。如果是这样,则挂钩将无法工作。

这是出于安全原因。这是共享主机上的典型情况。


我的替代解决方案:

我们可以创建一个git别名,您可以在其中使用ssh日志运行bash脚本并直接在服务器上运行git命令

如何做?

在本地存储库配置文件中,我们添加一个别名:

[alias]
    run = "!sh ./hook.sh"

(如您在示例中看到的,此别名将启动hook.sh文件)

现在我们用git命令创建一个hook.sh文件

#!/bin/bash

ssh user@host -p [port] 'bash -s' <<-EOF
    git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f
    exit
EOF

现在我们只需要使用git run命令

注意:这只是一个简单的例子。您必须根据自己的需求进行测试!

© www.soinside.com 2019 - 2024. All rights reserved.