practices - ¿Cómo hacer git-pull de un parche de Gerrit?
git tag commits (4)
Como se menciona en los comentarios, puede obtener el comando git correcto de la GUI de gerrit.
Si realmente no le gustan las GUI, o si desea automatizarlo (y por alguna razón no puede usar
git-review
), puede usar la API de gerrit:
curl -s ''https://<your gerrit server>/r/changes/<change id>?o=CURRENT_REVISION&o=DOWNLOAD_COMMANDS'' | tail -n+2 | jq -r ''.revisions[.current_revision].fetch["anonymous http"].commands.Pull'' | bash -
o
git pull origin `curl -s ''https://<your gerrit server>/r/changes/<change id>?o=CURRENT_REVISION'' | tail -n+2 | jq -r ''.revisions[.current_revision].ref''`
Cuando trabajo con Gerrit (Revisión de código), a menudo necesito obtener una copia de un conjunto de parches dado para fines de prueba o validación. La forma más fácil y obvia es descargar el archivo o el archivo de parche a través de la interfaz web de Gerrit y aplicarlo manualmente a mi fuente local.
Si bien los pasos anteriores son bastante sencillos y satisfacen mis necesidades, en el mejor mundo me gustaría que el parche apareciera como un compromiso en mi Git local.
Estaba mirando alrededor y no encontré la solución. Encontré información escasa que una vez compilada proporciona la siguiente solución.
Digamos que desea extraer el conjunto de parches 2 del cambio de Gerrit 1222:
Encuentre las referencias remotas que nos interesan:
$ git ls-remote | grep 1220
From http://something.com:8081/MyProject
e2e0212a59240ac5cd7c11220c35542523f44b59 refs/changes/13/713/1
b8c4dceea5eaf1bad711b0ea6938c80ec932726a refs/changes/20/1220/1
6f20c182ec7f54a2aa9e8f6188a0eef1b0790df4 refs/changes/20/1220/2
ed94a98386d224ce3d86004ce99f61220905a077 refs/changes/22/1222/1
Tire de las referencias:
git pull origin refs/changes/20/1220/2
Esto creará un punto de confirmación de Git que eventualmente podría volver a crear:
git rebase
Esta característica es estándar en la interfaz de usuario de Gerrit.
En la parte superior derecha de la interfaz de usuario para un parche, haga clic en Descargar y verá algo como:
Cuando esté navegando por los parches, vaya a la sección de descarga y copie el comando de la línea de comandos para verificar el conjunto de parches, por ejemplo, así:
git fetch https://gerrit.googlesource.com/gerrit refs/changes/03/64403/2 && git checkout FETCH_HEAD
Luego, normalmente creo una rama con el número de revisión y el conjunto de parches como nombre
git checkout -b b64403-2
Por aquí, puede trabajar normalmente y confirmar sus cambios o seleccionar o modificar sus cambios en este cambio.
Una vez que se realiza la revisión de r64403, su código puede fusionarse o cuando se envíe otro parche, deberá volver a hacer lo mismo.
Si no ve las opciones para descargar la opción
Checkout
o
Cherry Pick
, debe editar el
gerrit.config
, algo como esto:
[download]
scheme = ssh
command = checkout
command = cherry_pick
Se pueden encontrar más detalles en la documentación de Gerrit
Actualización: como barryku correctamente barryku , en la versión posterior debe descargar el complemento de descargas-comandos. Esto se puede hacer durante la configuración inicial o mediante el siguiente comando:
java -jar gerrit-2.11.4.war init -d review_site --batch --install-plugin download-commands
No estoy 100% seguro de cuál es tu pregunta.
Parece que quieres facilitar el flujo de trabajo o escribir.
los larsks ya mencionaron
git review
que se usa principalmente.
Para su caso, tal vez sea útil descargar todas las referencias automáticamente para que pueda consultarlas directamente . Siempre puede hacer referencia a todos los me gusta especificados con
git fetch origin "+refs/changes/*:refs/remotes/origin/changes/*"
Entonces puede trabajar localmente con el id de confirmación .
Se puede hacer fácilmente un simple alias git o escribirlo para todas las referencias. Puede encontrar un ejemplo de dicho ciclo while en el script en https://github.com/saper/gerrit-fetch-all Con un fragmento de shell tan pequeño que puede lograr fácilmente omitir una parte de la identificación de referencia para una referencia más fácil ellos:
Server side: Client side:
refs/changes/13/713/1 refs/head/713/1
refs/changes/20/1220/1 refs/head/1220/1
refs/changes/20/1220/2 refs/head/1220/2
refs/changes/22/1222/1 refs/head/1222/1
O puede usar la opción
-d
para
git-review
.
Por ejemplo, suponiendo que estaba trabajando con el repositorio
nova-docker
y estaba interesado en este cambio en gerrit:
Puede descargar el último parche de esta manera:
git review -d 148486
O puede usar la identificación de cambio:
git review -d I35729a86e211391f67cc959d19416c9125c6f9eb
También puede solicitar una revisión específica del parche agregando una coma y el número del parche. Por ejemplo, para obtener la segunda revisión de ese parche:
git review -d 148486,2