2016-10-11 96 views
13

我知道Gerrit收到git提交(也许使用update钩子),并将它们写在一个虚假的引用上,直到完成同行评审为止,但是这个过程在技术实现方面的确如何工作?什么是Git命令?Gerrit服务器如何拦截提交。寻找技术细节

+1

Gerrit系统设计文档可能会让你感兴趣 - https://gerrit-review.googlesource.com/Documentation/dev-design.html - 源代码也可在这里https://gerrit.googlesource.com/格里特/ – Robbie

回答

2

您可能会引用用户when pushing new commits使用的魔术参考refs/for/<branch ref>

要创建审查新的变化,只需按使用任何Git的客户端工具项目的神奇refs/for/'branch'裁判:

git push ssh://[email protected]:29418/projectname HEAD:refs/for/branch 

例如john.doe可以使用git推上传项目kernel/commonexperimental分支新的变化,在git.example.com格里特服务器托管:

git push ssh://[email protected]:29418/kernel/common HEAD:refs/for/experimental 

每个新提交由混帐推客户端上载将被转换成一个变化记录在服务器上。
远程编号refs/for/experimental实际上并不是由Gerrit创建的,即使客户端的状态消息可能另有说明。


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

由'git push'调用,并用'git push'端提供的信息更新项目存储库 。

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