¿Cómo se compromete la interceptación del server Gerrit? Buscando detalles técnicos

Entiendo que Gerrit recibe git commits (usando el gancho de update tal vez), y los escribe en una ref falsa en alguna parte hasta que se haga la revisión por pares, pero ¿cómo funciona exactamente ese process en términos de la implementación técnica? ¿Y qué commands de Git están involucrados?

Puede hacer reference a la reference mágica refs/for/<branch ref> que usa el usuario al presionar nuevas confirmaciones .

Para crear nuevos cambios para su revisión, simplemente presione hacia la refs/for/'branch' mágica de refs/for/'branch' usando cualquier herramienta de cliente Git:

 git push ssh://sshusername@hostname:29418/projectname HEAD:refs/for/branch 

Por ejemplo, john.doe puede usar git push para cargar nuevos cambios para la twig experimental del proyecto kernel/common , alojado en el server de git.example.com Gerrit:

 git push ssh://john.doe@git.example.com:29418/kernel/common HEAD:refs/for/experimental 

Cada nueva confirmación cargada por el cliente de git push se convertirá en un logging de cambio en el server.
El ref ref refs/for/experimental no es creado realmente por Gerrit, aunque los posts de estado del cliente pueden indicar lo contrario.


Técnicamente, esto es administrado por el cmd-receive-pack .

Invocado por 'git push' y actualiza el repository del proyecto con la información alimentada desde el extremo 'git push'.

Está implementado por gerrit/sshd/commands/Receive.java , que recibe gerrit/sshd/commands/Receive.java cambio a través de SSH utilizando el protocolo Git receive-pack .