问题描述:
我在git仓库中自动启动post-receive
钩子时遇到问题。从本地存储库推送到远程存储库后,钩子post-receive
只是不执行。
我执行的步骤:
non-bare
)存储库并创建多个提交bare
)上创建一个存储库,在此处创建post-receive
钩子并将其设置为chmod到755我的环境:
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
其他SO解决方案?:
是,我看过很多东西,但是没有一个能解决我的问题。我已经看到一些有关“未设置GIT_DIR”建议的答案,但恐怕与它无关,因为即使echo test > log.txt
也不能在post-receive
中使用。看来post-receive
无法启动?
确定,我发现了问题所在-主机上的分区安装为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
命令
注意:这只是一个简单的例子。您必须根据自己的需求进行测试!