¿Cómo git-pull un set de parches dado de Gerrit?

Cuando trabajo con Gerrit (revisión de código), a menudo necesito get una copy de un set de parches dado para fines de testing o validation. La forma más fácil y obvia es download el file o el file 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 aparezca como una confirmación en mi Git local.

Estaba mirando alnetworkingedor y no encontré la solución. Encontré alguna información dispersa que una vez comstackda en set da la siguiente solución.

Digamos que quiere tirar del parche establecido 2 del cambio 1222 de Gerrit:

Encuentra las references 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 los refs:

 git pull origin refs/changes/20/1220/2 

Esto creará un punto de compromiso de Git que eventualmente podría rebasear:

 git rebase 

Esta característica es estándar en la UI de Gerrit.

En la esquina superior derecha de la interfaz de usuario para ver un parche, haz clic en Descargar y verás algo como:

Cambio de pantalla de Gerrit Descargar

Cuando navegue por los parches, vaya a la sección de descarga y copie el command de la línea de command para verificar el set de parches, por ejemplo, haga lo siguiente:

 git fetch https://gerrit.googlesource.com/gerrit refs/changes/03/64403/2 && git checkout FETCH_HEAD 

Luego normalmente creo una twig con el número de revisión y el parche como nombre

 git checkout -b b64403-2 

Aquí puede trabajar normalmente y comprometer sus cambios o seleccionar / volver a establecer sus cambios en este cambio.

Una vez que se realiza la revisión de r64403, su código puede fusionarse o cuando se envía otro parche, deberá hacer lo mismo nuevamente.

Si no ve las opciones para download la opción a Checkout o Cherry Pick , necesita editar 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 señala correctamente, en la versión posterior necesita download el plugin de descargas-commands. Esto puede hacerse durante la configuration inicial o usando el siguiente command:

 java -jar gerrit-2.11.4.war init -d review_site --batch --install-plugin download-commands 

O puede usar la opción -d para git-review . Por ejemplo, suponiendo que estuvieras trabajando con el repository nova-docker y estuvieras interesado en este cambio en gerrit:

Puede download el último parche de esta manera:

 git review -d 148486 

O puede usar la ID de cambio:

 git review -d I35729a86e211391f67cc959d19416c9125c6f9eb 

También puede solicitar una revisión específica del parche al agregar una coma y el número de parche. Por ejemplo, para get la segunda revisión de ese parche:

 git review -d 148486,2 

No estoy 100% seguro de cuál es tu pregunta. Parece que quieres facilitar el flujo de trabajo o escribir. larsks mencionó ya la git review que se usa principalmente.

Para su caso, tal vez sea útil download todas las references automáticamente para que pueda consultarlas directamente. Siempre puedes especificar todas las references como con el git fetch origin "+refs/changes/*:refs/remotes/origin/changes/*" . Entonces puede trabajar localmente con la identificación de confirmación.

Un simple alias git o scripting it para todos los refs se puede hacer fácilmente. Puede encontrar un ejemplo de dicho bucle while en el script en https://github.com/saper/gerrit-fetch-all Con un fragment de shell tan pequeño, puede realizar fácilmente omitir una parte de la ID de reference para hacer una reference 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 

Como se mencionó en los comentarios, puede get el command git correcto de la GUI de gerrit. Si realmente no le gustan las GUI, o si desea automatizarla (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'`