Migrar un proyecto de Gerrit a una instancia diferente de Gerrit

Tengo MainGerritServer que alberga muchos proyectos.
Además, tengo RogueGerritServer que también alberga muchos proyectos.

Estoy buscando una manera de mover un ProjectA de RogueGerritServer a MainGerritServer , conservando el historial de commit de Git y el historial de revisión de Gerrit.

Por ejemplo, quiero importar el historial Gerrit del proyecto Android en mi propio server Gerrit, para que cuando trabaje en una versión bifurcada de Android, pueda search el historial de Gerrit en mi server local. ¿Cuál es la mejor manera de hacer esto?

Si fuera una simple installation de Git, simplemente clonaría ProjectA en mi computadora y luego presionaría MainGerritServer . ¿Un proyecto basado en Gerrit funciona de la misma manera?

Me preocupa porque la installation de Gerrit utiliza una database en segundo plano, y no estoy seguro de si también necesito migrar la información en la database. Vi muchos hilos acerca de tomar un volcado de database y moverlo a un nuevo server. Sin embargo, estoy tratando de mover solo un proyecto, por lo que tomar un DB volcado no parece apropiado. La respuesta más cercana que vi fue esta, que todavía no es exactamente lo que estoy buscando.

Agradecería cualquier ayuda, especialmente si me pueden mostrar si estoy entendiendo mal cómo abordar esto.

Gracias

He estado moviendo muchos proyectos de git últimamente y aunque en su mayoría me he mudado de Gerrit (debido a la decisión del departamento, Gerrit es una buena elección de IMO), esto debería funcionar igual y es relativamente fácil. Sin embargo, mover la historia de Gerrit será más difícil.

A continuación, se indica cómo mover un repository:

  1. Clona el proyecto desde la fuente actual.
  2. Crea el nuevo proyecto gerrit.
  3. En su clon local del proyecto que desea mover, agregue la nueva location del proyecto como un nuevo control remoto:

    git remote add NewGerrit ssh: // NewGerritServer: 29418 / NewProject

  4. empujar al nuevo control remoto. Para impulsar la historia completa hazlo:

    git push –todo NewGerrit

También puede configurarlo para rastrear automáticamente el nuevo repository agregando un indicador -u:

 git push --all -u NewGerrit 

Migrar las bases de datos de Gerrit es un trabajo mucho más grande y, sinceramente, te sugiero que simplemente renuncies a él a less que sea absolutamente necesario. Puede get una idea de lo que implica el acceso a la database directamente a través del lenguaje de consulta (terrible) de Gerrit, GSQL. Se parece mucho a mysql, excepto que es más temperamental y carece de muchas funciones.

 ssh -p 24981 HOSTNAME gerrit gsql 

Esto le dará un post de gsql. Prueba esto:

 gerrit> SHOW TABLES; 

Los topes, al less en la versión de Gerrit a la que tengo acceso, son importantes. (El mío está ciertamente desactualizado.) Esto le mostrará alnetworkingedor de 29 tablas y el historial de su proyecto se extiende por todas ellas.

De acuerdo con esta publicación de Shawn Pearce (líder del proyecto Gerrit), necesitarás copyr la database a un nuevo server db y luego eliminar manualmente todos los demás proyectos usando SQL. A continuación, puede volcar los datos restantes e importarlos al otro server Gerrit. NOTA LA CAVEAT : podría haber una colisión de valores change_id. Sin embargo, sugiere una solución para esto:

Podrías encontrar el change_id máximo del set entrante, ir manualmente al change_id_seq del server de destino para reservar suficiente espacio de id, luego replace todos los antiguos change_ids por un valor base para que estén en un espacio único en el destino … y finalmente cargue las filas al destino.

Entonces se puede hacer. Es un dolor en los cuartos traseros.

Ahora también hay un complemento de importador que se puede usar para migrar un repository de git y todas las revisiones de un server a otro. Funciona con Gerrit versión 2.11 y posterior.

Más documentation:

  • Acerca del complemento de importador
  • Anuncio de correo electrónico

El complemento de importador se puede download del server de CI (no oficial): versión maestra , versión estable 2.12 , versión estable 2.11 .

El complemento de importador presentado en la respuesta por David Pursehouse parece ser el path a seguir. Sin embargo, como tuve problemas para get el binary ( no parece descargable, uno tiene que comstackrlo usted mismo, hay enlaces de descarga , pero no estaba al tanto de ellos en el momento de escribir esto), así como su uso, pensé que agregué mis experiencias al hacer esto.

  1. Descargue, compile e instale Buck . Buck es un sistema de compilation creado por Facebook. Necesita un sistema Linux / Unix, no funcionará en Windows.

Pasos:

 $ sudo apt-get ant -y $ git clone https://github.com/facebook/buck.git $ cd buck $ ant 

(ref. instrucciones de installation )

  1. Descargue y compile el importador

Pasos:

 $ git clone https://gerrit.googlesource.com/plugins/importer $ git clone https://gerrit.googlesource.com/bucklets $ cd importer $ ln -s ../bucklets . && ln -s bucklets/buckversion .buckversion && ln -s bucklets/watchmanconfig .watchmanconfig # check latest stable version $ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/stable-2.11 # and use that # why? well, snapshot version depends on snapshot apis, and you get into dependency hell with those... $ git checkout stable-2.11 $ ../buck/bin/buck build plugin 

El file binary será buck-out/gen/importer.jar .

(ref. instrucciones de compilation )

  1. Copie el .jar generado en su $ gerrit_site / plugins (cree el directory si no existe) o, si necesita hacerlo de manera remota, haga ssh -i /path/to/your/ssh/key -p 29418 youraccont@localhost gerrit plugin install -n importer.jar /path/to/importer.jar . Este último necesitará plugins.allowRemoteAdmin habilitado.

  2. Reinicie su instancia gerrit con $gerrit_site/bin/gerrit.sh restart

  3. El complemento debe ser visible en la interfaz web

Después de eso, el process es el siguiente:

  1. hacer la import inicial del proyecto
  2. testing en el objective Gerrit que todo está bien
  3. informar al equipo del proyecto sobre la mudanza del proyecto y rechazar nuevas modificaciones del proyecto en el server Gerrit de origen (por ejemplo, mediante permissions o estableciendo el estado del proyecto como de solo lectura)
  4. reanudar la import del proyecto para get todas las modificaciones que se han realizado después de la import inicial
  5. complete la import y, si es necesario, haga que el proyecto en el server Gerrit de destino se pueda escribir
  6. informar al equipo del proyecto que ahora pueden trabajar en el proyecto en el server Gerrit de destino
  7. reconfigure cualquier herramienta de terceros (como Jenkins) para trabajar contra el proyecto en el server Gerrit de destino
  8. [opcionalmente] elimine el proyecto en el server Gerrit de origen utilizando el complemento delete-project

Primero hacer una import inicial y reanudar la import tiene la ventaja de que el time de inactividad para el equipo del proyecto puede mantenerse mínimo. La import inicial del proyecto puede llevar algo de time, pero el currículum debe ser rápido ya que solo necesita transferir el delta desde la import (última) inicial.

(ref: About.md )

Personalmente, no he podido hacer que el process de import funcione. Parece que durante la fase de import, después de horas de trabajo en progreso, al less en nuestra networking recibimos con java.io.IOException: Unexpected response code for GET on /config/server/version : 504 significa time de espera de networking antes esto llega a algún estado. Esto sucede incluso con pequeños repositorys.

Logré hacer funcionar el complemento importador , pero también obtuve 504 errores continuamente. El complemento solicita 500 cambios a la vez (lea de GlobalCapability.DEFAULT_MAX_QUERY_LIMIT, que está codificado a 500). No pude build con éxito la twig stable-2.13 del complemento, por lo que acabo de volver a intentar y volver a intentar la import hasta que finalmente tenga éxito.