有没有办法如何明确绕过触发后接收挂钩?推送提交后的含义将不会运行post-receive挂钩。
答案 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)
可以使推送更加复杂。