Git 从本地存储库推送到远程存储库后,Hook post receive不起作用
问题描述:Git 从本地存储库推送到远程存储库后,Hook post receive不起作用,git,localhost,remote-server,githooks,git-post-receive,Git,Localhost,Remote Server,Githooks,Git Post Receive,问题描述: #!/bin/sh git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f [alias] run = "!sh ./hook.sh" 我在git存储库中自动启动post receivehook时遇到问题。 从本地推送到远程存储库之后,hookpost-receive就不会执行了 我所做的步骤: #!/bin/sh gi
#!/bin/sh
git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f
[alias]
run = "!sh ./hook.sh"
我在git存储库中自动启动post receive
hook时遇到问题。
从本地推送到远程存储库之后,hookpost-receive
就不会执行了
我所做的步骤:
#!/bin/sh
git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f
[alias]
run = "!sh ./hook.sh"
非裸
)存储库并创建多个提交bare
),在那里创建一个post-receive
钩子,并将其设置为chmod为755我的环境:
#!/bin/sh
git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f
[alias]
run = "!sh ./hook.sh"
- 本地计算机:
@git2.25.0.windows.1
Win10(1909)
- 远程计算机:
@git2.25.0
Debian 8.11(杰西)
远程计算机上接收后文件的内容:
#!/bin/sh
git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f
[alias]
run = "!sh ./hook.sh"
- 注意:当我直接从ssh控制台运行此代码时,它工作正常
其他SO解决方案?:
#!/bin/sh
git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f
[alias]
run = "!sh ./hook.sh"
是的,我见过很多,但没有一个能解决我的问题。
我已经看到了一些关于“unset GIT_DIR”建议的答案,但我担心这与此无关,因为即使是
echo test>log.txt
在post receive
中也不起作用。似乎无法启动后接收?好的,我发现了问题所在-主机上的分区装载为noexec
。如果是这样,挂钩就不能工作
这是出于安全考虑。这是共享主机上的典型情况
我的替代解决方案: 我们可以创建一个git别名,您可以在其中使用ssh日志运行bash脚本,并直接在服务器上运行git命令 怎么做? 在本地存储库配置文件中,我们添加了一个别名:
#!/bin/sh
git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f
[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
#/bin/bash
sshuser@host-p[port]'bash-s'好的,我发现了问题所在-主机上的分区装载为noexec
。如果是这样,挂钩就不能工作
这是出于安全考虑。这是共享主机上的典型情况
我的替代解决方案:
我们可以创建一个git别名,您可以在其中使用ssh日志运行bash脚本,并直接在服务器上运行git命令
怎么做?
在本地存储库配置文件中,我们添加了一个别名:
#!/bin/sh
git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f
[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
#/bin/bash
sshuser@host-p[port]“bash-s”是/home/xxxxxx/xxxxxx/dev.git/hooks/post receive
中的钩子?是的,当然,它是对的。您在那里设置了核心。钩子span
?您是指远程服务器上的设置,对吗?还没定下来。现在我尝试将其设置为core.hookspath=/home/xxxxxx/xxxxxx/dev.git/hooks
。不幸的是,/home/xxxxxx/xxxxxx/dev.git/hooks/post receive
中的钩子没有任何变化?是的,当然,它是正确的。您是否设置了核心。钩子?您是指远程服务器上的设置,对吗?还没定下来。现在我尝试将其设置为core.hookspath=/home/xxxxxx/xxxxxx/dev.git/hooks
。不幸的是,一切都没有改变