2

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

我试过简单地发出git push --force,但它不起作用。钩子没有被忽视。

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

就像是

git push origin --ignoreOurCustomHook

然后在脚本中

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

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

任何关于要调查的事情的建议表示赞赏。

4

2 回答 2

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
于 2015-01-26T16:09:46.770 回答
1

您可以使用--signed标志git push来绕过实际的钩子逻辑。

正常推送将在没有--signed标志的情况下完成,但是当钩子提供误报时,您执行 agit push --signed并在钩子中评估环境变量GIT_PUSH_CERT_SIGNERGIT_PUSH_CERT_KEY. 这样做,您还可以清楚地识别出是谁推动了这一点……

于 2015-01-26T12:27:38.727 回答