绕过post-receive hook git

时间:2014-04-02 09:45:39

标签: git push githooks

有没有办法如何明确绕过触发后接收挂钩?推送提交后的含义将不会运行post-receive挂钩。

2 个答案:

答案 0 :(得分:2)

在接收(服务器端)端单独使用git似乎不可能:你需要自定义你的钩子以便允许这种情况(跳过)发生。
这与本地挂钩不同,you can skip (for some of them)

请参阅" Skip processing of Git revisions in post-receive hook that have already been previously processed"中的钩子。 (这是关于部分提交的,但想法类似)

答案 1 :(得分:2)

使用post-receive可以跳过push-options钩子。

要实现这一目标,您需要三种成分:

1)

根据man githooks接收后部分:

  

可以从环境变量GIT_PUSH_OPTION_COUNT读取git push --push-option = ...命令行上给定的push选项数,这些选项本身可以在GIT_PUSH_OPTION_0,GIT_PUSH_OPTION_1,...中找到。协商不使用推入选项阶段,将不会设置环境变量。如果客户端选择使用推送选项,但不传输任何推送选项,则计数变量将设置为零,即GIT_PUSH_OPTION_COUNT = 0。

因此,您可以像这样准备post-receive钩子脚本:

if [ "x${GIT_PUSH_OPTION_COUNT}" = "x0" ] ; then
    exec /usr/share/buildbot/contrib/git_buildbot.py --master=172.16.1.1:8989 --auth="***" --category=yaal --project=yaal --repository=yaal "${@}"
fi

2)

根据git-config-receiveadvertisePushOptions

  

设置为true时,git-receive-pack将向其客户端通告推送选项功能。默认情况下为False。

因此,您需要像这样在遥控器上添加此配置:

git config receive.advertisePushOptions true

或手动编辑 project.git / config

3)

对于您不希望触发 post-receive 钩子的推送,只需添加虚拟推送选项,如下所示:

git push -o blah

使用$GIT_PUSH_OPTION_(n)可以使推送更加复杂。