我们在Gitblit中有一个预接收挂钩,可以防止不需要的提交被推送到服务器。钩子逻辑有时会产生误报。真的很难让它绝对准确。我们希望能够以某种方式执行push命令的修改版本,它将忽略钩子。
我尝试过发布git push --force
,但它不起作用。钩子不会被忽略。
有没有办法向git push
添加自定义参数并在Gitblit Groovy脚本中解析它们?
像
这样的东西git push origin --ignoreOurCustomHook
然后在脚本中
if(someObject.getParameter('ignoreOurCustomHook') != null)
{
break
}
通过JGit文档挖掘到目前为止没有任何用处。也许我可以使用receivePacket.pckIn
手动解析整个命令,但它似乎是超级硬核,并且在我第一次尝试读取数据包时就崩溃了。
对任何需要调查的事项的建议表示赞赏。
答案 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
。这样做,你也可以清楚地确定世卫组织是否已经超越了这一点......