我编写了简单的shell脚本来抛出“成功和失败消息”,并将其放在.git / hooks /下,具有所有适当的权限。我想将此脚本称为post-receive。但是脚本不起作用,运行脚本只是工作,但作为post-receive钩子它不起作用。
他们的某些东西是错过了还是我错误地理解了收件后挂钩。有人可以解释客户端和服务器端钩子以及如何执行它们。
我搜索过但却无法理解。
答案 0 :(得分:1)
需要调用post-receive
(无扩展名,例如没有post-receive.sh
)。
如果它(如OP所做的那样)放在.git / hooks文件夹中,并且是可执行的,当你推送到那个仓库时它会被调用(因为它是a server hook)。
如果您要将它安装在您自己的本地仓库上,则不会调用它(除非您以某种方式推送到您自己的仓库,这似乎不太可能)。
对于像GitHub这样的远程Git托管服务器,您需要将该挂钩实现为 webhook (GitHub push event的监听器)。
答案 1 :(得分:1)
要启用post-receive
钩子脚本,请将文件命名为.git目录的钩子子目录(不带任何扩展名),并使其可执行:
touch GIT_PATH/hooks/post-receive
chmod u+x GIT_PATH/hooks/post-receive
有关更多信息,请查看以下文档:https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
检查此示例(简单部署)GIT_PATH/hooks/post-receive
:
#!/bin/bash
TRAGET="/home/webuser/deploy-folder"
GIT_DIR="/home/webuser/www.git"
BRANCH="master"
while read oldrev newrev ref
do
# only checking out the master (or whatever branch you would like to deploy)
if [[ $ref = refs/heads/$BRANCH ]];
then
echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
git --work-tree=$TRAGET --git-dir=$GIT_DIR checkout -f
else
echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
fi
done
来源:https://gist.github.com/noelboss/3fe13927025b89757f8fb12e9066f2fa#file-