理解Git Hook - post-receive hook

时间:2015-01-23 08:44:11

标签: git githooks git-post-receive

我编写了简单的shell脚本来抛出“成功和失败消息”,并将其放在.git / hooks /下,具有所有适当的权限。我想将此脚本称为post-receive。但是脚本不起作用,运行脚本只是工作,但作为post-receive钩子它不起作用。

他们的某些东西是错过了还是我错误地理解了收件后挂钩。有人可以解释客户端和服务器端钩子以及如何执行它们。

我搜索过但却无法理解。

2 个答案:

答案 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-