我目前正在实施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提供神奇的引用。如果之前确实提出了类似的问题,请道歉。谢谢!
答案 0 :(得分:0)
即使在"普通的git"中也很难实现魔法参考。您只需要在远程存储库中实现pre-receive
或update
挂钩,该挂钩识别推送的目标分支并对其执行任何操作(例如,将推送存储在另一个分支中)。
虽然我没有任何实现细节(我认为它更复杂),这与Gerrit的行为相同。您按下refs/for/master
并将其存储在refs/changes/66/5066/2
分支(例如)中。