如何忽略每个命令的 Gitblit 钩子?
How to ignore Gitblit hook per command?
我们在 Gitblit 中有一个预接收挂钩,可以防止将不需要的提交推送到服务器。挂钩逻辑有时会产生误报。真的很难做到绝对准确。我们希望能够以某种方式执行忽略挂钩的 push 命令的修改版本。
我试过简单地发出 git push --force
,但它不起作用。钩子不被忽略
有什么方法可以将自定义参数添加到 git push
并在 Gitblit Groovy 脚本中解析它们?
类似
git push origin --ignoreOurCustomHook
然后在脚本中
if(someObject.getParameter('ignoreOurCustomHook') != null)
{
break
}
到目前为止,通过 JGit 文档挖掘没有任何用处。也许我可以使用 receivePacket.pckIn
手动解析整个命令,但它似乎超级硬核,并且在我第一次尝试读取数据包时就崩溃了。
如有任何建议,我们将不胜感激。
您可以使用 --signed
flag for git push
来绕过实际的挂钩逻辑。
正常推送将在没有 --signed
标志的情况下完成,但是当挂钩提供误报时,您执行 git push --signed
并在挂钩中评估环境变量 GIT_PUSH_CERT_SIGNER
or GIT_PUSH_CERT_KEY
。这样做,您还可以清楚地确定谁通过覆盖挂钩进行了推送...
您必须使用调试器进行一些试验,但可以按照您的意愿发送推送参数。让他们使用 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
我们在 Gitblit 中有一个预接收挂钩,可以防止将不需要的提交推送到服务器。挂钩逻辑有时会产生误报。真的很难做到绝对准确。我们希望能够以某种方式执行忽略挂钩的 push 命令的修改版本。
我试过简单地发出 git push --force
,但它不起作用。钩子不被忽略
有什么方法可以将自定义参数添加到 git push
并在 Gitblit Groovy 脚本中解析它们?
类似
git push origin --ignoreOurCustomHook
然后在脚本中
if(someObject.getParameter('ignoreOurCustomHook') != null)
{
break
}
到目前为止,通过 JGit 文档挖掘没有任何用处。也许我可以使用 receivePacket.pckIn
手动解析整个命令,但它似乎超级硬核,并且在我第一次尝试读取数据包时就崩溃了。
如有任何建议,我们将不胜感激。
您可以使用 --signed
flag for git push
来绕过实际的挂钩逻辑。
正常推送将在没有 --signed
标志的情况下完成,但是当挂钩提供误报时,您执行 git push --signed
并在挂钩中评估环境变量 GIT_PUSH_CERT_SIGNER
or GIT_PUSH_CERT_KEY
。这样做,您还可以清楚地确定谁通过覆盖挂钩进行了推送...
您必须使用调试器进行一些试验,但可以按照您的意愿发送推送参数。让他们使用 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