2

我目前正在实施 Gerrit 作为中央代码审查系统。在试图了解 Gerrit 来龙去脉的过程中,我卡在了下面这句话上。取自Gerrit 文档

由于 Gerrit 在其自己的进程空间内实现了整个 SSH 和 Git 服务器堆栈,因此 Gerrit 可以完全控制存储库的更新方式,以及git push 最终用户或repo upload. 这允许 Gerrit 提供神奇的 refs,例如refs/for/*用于新的变更提交和refs/changes/*变更替换。

上面的陈述是什么意思,特别是这句话:“由于 Gerrit 在自己的进程空间内实现了整个 SSH 和 Git 服务器堆栈”?我尝试搜索相关问题,但我找到的最接近的问题是Why is git push gerrit HEAD:refs/for/master used instead of git push origin master,但它没有提供关于如何实现服务器堆栈的充分解释允许 Gerrit 提供神奇的 refs。如果之前确实有人问过类似的问题,我们深表歉意。谢谢!

4

1 回答 1

0

即使在“普通 git”中实现一个神奇的 ref也不难。您只需在远程存储库中实现pre-receiveupdate挂钩,以识别推送的目标分支并对其进行任何操作(例如,将推送存储在另一个分支中)。

尽管我没有任何实现细节(我想它要复杂得多),但这与 Gerrit 的行为相同。您推送到refs/for/master并将其存储在refs/changes/66/5066/2分支中(例如)。

一些例子

于 2016-04-15T06:27:41.943 回答