git - gerrit name
¿Por qué git push gerrit HEAD: refs/for/master utilizado en lugar de git push origin master (2)
Acabo de empezar a usar Gerrit y quiero saber por qué tenemos que hacer git push gerrit HEAD:refs/for/master
lugar de hacer git push origin master
Si lo hago git push origin master
me sale el error diciendo ! [remote rejected] master -> master (prohibited by Gerrit)
! [remote rejected] master -> master (prohibited by Gerrit)
La documentación de Gerrit, en particular la sección "Cambios de inserción" , explica que debe presionar refs/for/''branch''
ref mágico refs/for/''branch''
ref usando cualquier herramienta cliente de Git".
La siguiente imagen está tomada desde la Introducción a Gerrit . Cuando presionas a Gerrit, haces git push gerrit HEAD:refs/for/<BRANCH>
. Esto lleva sus cambios al área de preparación (en el diagrama, "Cambios pendientes"). Gerrit en realidad no tiene una rama llamada <BRANCH>
; le corresponde al cliente de git.
Internamente, Gerrit tiene su propia implementación para las pilas Git y SSH. Esto le permite proporcionar los refs "mágicos" refs/for/<BRANCH>
.
Cuando se recibe una solicitud de inserción para crear una referencia en uno de estos espacios de nombres, Gerrit realiza su propia lógica para actualizar la base de datos, y luego miente al cliente sobre el resultado de la operación. Un resultado exitoso hace que el cliente crea que Gerrit ha creado la referencia, pero en realidad Gerrit no ha creado la referencia. [ Enlace - Gerrit, "Detalles arenosos" ].
Después de un parche exitoso (es decir, el parche ha sido enviado a Gerrit, [poniéndolo en el área de etapas de "Cambios pendientes"], revisado, y la revisión ha pasado), Gerrit empuja el cambio de los "Cambios pendientes" al " Repositorio Autoritativo ", calculando en qué rama insertarla en función de la magia que ejerció cuando pulsó hacia refs/for/<BRANCH>
. De esta forma, los parches revisados con éxito pueden extraerse directamente de las sucursales correctas del Authoritative Repository
.
Para evitar tener que especificar completamente el comando git push, puede modificar alternativamente su archivo de configuración de git:
[remote "gerrit"]
url = https://your.gerrit.repo:44444/repo
fetch = +refs/heads/master:refs/remotes/origin/master
push = refs/heads/master:refs/for/master
Ahora puedes simplemente:
git fetch gerrit
git push gerrit
Esto es según Gerrit