Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解Git钩子-post接收钩子_Git_Githooks_Git Post Receive - Fatal编程技术网

理解Git钩子-post接收钩子

理解Git钩子-post接收钩子,git,githooks,git-post-receive,Git,Githooks,Git Post Receive,我编写了一个简单的shell脚本来抛出“成功和失败消息”,并将其放置在具有所有适当权限的.git/hooks/下。我想将此脚本称为post接收。但是脚本不起作用,运行脚本只是起作用,但作为post-receive-hook它不起作用 是他们错过了什么,还是我错误地理解了这个帖子。有人能解释一下客户端和服务器端钩子以及如何执行它们吗 我已经搜索过了,但无法理解。它需要被称为post-receive(例如,没有扩展名,没有post-receive.sh) 如果它被放置在.git/hooks文件夹中(

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

是他们错过了什么,还是我错误地理解了这个帖子。有人能解释一下客户端和服务器端钩子以及如何执行它们吗


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

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

如果它被放置在.git/hooks文件夹中(正如OP所做的那样),并使其可执行,那么当您推送到该repo时,它将被调用(因为它是)。
如果你要在你自己的本地回购协议上安装它,它将不会被调用(除非你以某种方式推动你自己的回购协议,这似乎不太可能)


对于像GitHub这样的远程Git托管服务器,您需要将该钩子实现为一个(侦听器)。

要启用
post receive
钩子脚本,请在.Git目录的hooks子目录中放置一个名称相同(没有任何扩展名)的文件,并使其可执行:

触摸GIT_路径/挂钩/post接收
chmod u+x GIT_路径/挂钩/post接收
有关更多信息,请查看此文档:

例子 检查这个示例(一个简单的部署)
GIT\u路径/hooks/post-receive

#/bin/bash
TRAGET=“/home/webuser/deploy文件夹”
GIT_DIR=“/home/webuser/www.GIT”
BRANCH=“master”
当读取oldrev newrev ref时
做
#仅签出主服务器(或您希望部署的任何分支)
如果[[$ref=refs/heads/$BRANCH]];
然后
echo“收到Ref$Ref。正在将${BRANCH}分支部署到生产…”
git--工作树=$TRAGET--git dir=$git\u dir checkout-f
其他的
echo“收到Ref$Ref。不执行任何操作:此服务器上只能部署${BRANCH}分支。”
fi
完成
资料来源:


我建议向我们展示更多,比如你正在使用的脚本,以及你试图如何调用它。另外,Pro-Git的部分和手册页都很有帮助。您可能忘记将其标记为可执行文件了吗?一个显式的
sh./post-receive
不管怎样都可以工作,但几乎没有其他功能(而不是这个)。如何“在服务器上”安装钩子?我刚刚将它放在.git/hooks文件夹中,并使其可执行。还有什么需要做的吗?@Sumit what
git remote-v
返回什么?您的服务器是什么?它返回以下内容:origin(fetch)origin(push)where是我的组织名称。@Sumit如果这是由GitHub管理的(意味着它不是本地的,由您的公司管理),那么您就不能编写post receive钩子,因为它是服务器端钩子,如中所述。你可以看看。哦,我想我明白了。Webhooks可能是我需要的。谢谢你给我指明了正确的方向!