Gerrit如何实现其“神奇”的参考?

时间:2016-04-13 13:02:39

标签: git gerrit git-refspec

我目前正在实施Gerrit作为中央代码审查系统。在试图理解格里特的来龙去脉的过程中,我被困在下面的句子中。取自Gerrit documentation

  

Gerrit在其中实现了整个SSH和Git服务器堆栈   拥有自己的流程空间,Gerrit保持对流程的完全控制   存储库已更新,以及将哪些响应发送到git push   最终用户或repo upload调用的客户端。这允许   格里特提供神奇的参考,例如新refs/for/*   更改提交,refs/changes/*更改替换。

上述陈述是什么意思,尤其是这句话:“Gerrit在其中实现了整个SSH和Git服务器堆栈 自己的过程空间“?我尝试搜索相关问题,但我发现的最接近的是Why is git push gerrit HEAD:refs/for/master used instead of git push origin master,但它没有提供充分的解释,说明服务器堆栈的实现如何允许Gerrit提供神奇的引用。如果之前确实提出了类似的问题,请道歉。谢谢!

1 个答案:

答案 0 :(得分:0)

即使在"普通的git"中也很难实现魔法参考。您只需要在远程存储库中实现pre-receiveupdate挂钩,该挂钩识别推送的目标分支并对其执行任何操作(例如,将推送存储在另一个分支中)。

虽然我没有任何实现细节(我认为它更复杂),这与Gerrit的行为相同。您按下refs/for/master并将其存储在refs/changes/66/5066/2分支(例如)中。

some examples