繁体   English   中英

理解 Git Hook - post-receive hook

[英]Understanding Git Hook - post-receive hook

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

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

我已经搜索过了,但无法理解。

要启用post-receive hook 脚本,请将一个文件放在 .git 目录的 hooks 子目录中,该文件同名(没有任何扩展名)并使其可执行:

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
TARGET="/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=$TARGET --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-

它需要被称为post-receive (例如没有扩展名,没有post-receive.sh )。

如果它被放置(就像 OP 所做的那样)在 .git/hooks 文件夹中,并使其可执行,那么当你推送到那个 repo 时它会被调用(因为它是一个服务器钩子)。
如果你将它安装在你自己的本地仓库上,它就不会被调用(除非你以某种方式推送到你自己的仓库,这似乎不太可能)。

对于像 GitHub 这样的远程 Git 托管服务器,您需要将该钩子实现为webhookGitHub 推送事件的侦听器)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM