Gerrit服务器如何拦截提交.寻找技术细节

Sth*_*the 13 git gerrit server

我理解Gerrit会收到git提交(update也许使用钩子),然后将它们写在假的ref上,直到完成同行评审,但这个过程在技术实现方面究竟是如何工作的呢?Git命令涉及什么?

Von*_*onC 2

您可以引用用户在推送新提交时refs/for/<branch ref>使用的魔术引用。

\n\n
\n

refs/for/\'branch\'要创建新的更改以供审核,只需使用任何 Git 客户端工具推送到项目\xe2\x80\x99s 神奇引用:

\n
\n\n
git push ssh://sshusername@hostname:29418/projectname HEAD:refs/for/branch\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

例如,john.doe可以使用 git push 上传托管在Gerrit 服务器上的experimental项目分支的新更改:kernel/commongit.example.com

\n
\n\n
git push ssh://john.doe@git.example.com:29418/kernel/common HEAD:refs/for/experimental\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

git推送客户端上传的每一个新的提交都会在服务器上转换成一条变更记录。
\n 远程引用refs/for/experimental实际上并不是由 Gerrit 创建的,尽管 client\xe2\x80\x99s 状态消息可能另有说明。

\n
\n\n
\n\n

从技术上讲,这是由cmd-receive-pack管理的。

\n\n
\n

由“git Push”调用,并使用“git Push”端提供的信息更新项目的存储库。

\n
\n\n

它由 实现,它使用Git receive-pack 协议gerrit/sshd/commands/Receive.java通过 SSH 接收更改上传。

\n