如何忽略Gitblit hook per命令?

时间:2015-01-26 11:31:28

标签: git jgit gitblit

我们在Gitblit中有一个预接收挂钩,可以防止不需要的提交被推送到服务器。钩子逻辑有时会产生误报。真的很难让它绝对准确。我们希望能够以某种方式执行push命令的修改版本,它将忽略钩子。

我尝试过发布git push --force,但它不起作用。钩子不会被忽略。

有没有办法向git push添加自定义参数并在Gitblit Groovy脚本中解析它们?

这样的东西
git push origin --ignoreOurCustomHook

然后在脚本中

if(someObject.getParameter('ignoreOurCustomHook') != null)
{
  break
}

通过JGit文档挖掘到目前为止没有任何用处。也许我可以使用receivePacket.pckIn手动解析整个命令,但它似乎是超级硬核,并且在我第一次尝试读取数据包时就崩溃了。

对任何需要调查的事项的建议表示赞赏。

2 个答案:

答案 0 :(得分:2)

您必须使用调试器进行一些实验,但可以发送您想要的推送参数。将它们带到Groovy钩子机制可能会很棘手。或者可能不是。我没看过它。

git push --receive-pack='git receive-pack --ignoreOurCustomHook' origin master

一旦你有了工作,你应该能够设置一个自定义遥控器来更干净地处理它:

$ cat .git/config
...
[remote "ignoreHook"]
  url = https://somewhere.com/r/myrepo.git
  receivepack = git receive-pack --ignoreCustomHook

$ git push ignoreHook master

答案 1 :(得分:1)

您可以使用--signed flag for git push来绕过实际的挂钩逻辑。

正常推送将在没有--signed标志的情况下完成,但是当钩子传递假阳性时,您执行git push --signed并在钩子中评估环境变量GIT_PUSH_CERT_SIGNER or GIT_PUSH_CERT_KEY。这样做,你也可以清楚地确定世卫组织是否已经超越了这一点......