Integrando diferentes ramas de fuentes externas en un único repositorio Mercurial


8

Editar : Haciendo esto aún más claro a medida que la recompensa está a punto de expirar: ¿hay alguna forma de importar el historial (extraer de SCM diferente) directamente a una rama específica con Mercurial?


Actualmente estoy trabajando en una empresa que usa Perforce y estoy dando paso al control de versiones distribuidas con Mercurial. He tenido éxito al importar el historial de Perforce utilizando el perfarce (un nombre bastante adecuado, me río cada vez que lo veo / lo digo), sin embargo, esto solo funciona con una sola rama a la vez.

Así es como funciona mi configuración de integración P4:

  • En realidad, crea un "cliente", que es una especie de descripción de lo que estarás actualizando / revisando constantemente. Esto solo puede abordar una rama a la vez (troncal u otra).
  • Una vez que hagas esto, corre hg clone p4://<server>/<client_name>
  • Vaya a .hg / hgrc y ponga la línea de ruta forzada: perforce = p4://<server>/<client_name>
  • Trabaje normalmente con el código bajo mercurial, haga hg pull perforcepara sincronizar, hg pushpara exportar una lista de cambios

Lo que me gustaría poder hacer es tener una ruta de rendimiento por rama y hacer que todo funcione en el mismo repositorio. Ahora, empujar no es un problema, sin embargo, si extraigo el historial de otra rama, terminaría en la rama predeterminada.

Me gustaría poder hacer algo así hg pull perforce-R5y hacer que aterrice en la rama R5 de mercurial. Incluso si no tengo un historial de fusión, sería lo suficientemente dulce como para poder preservar el historial de la sucursal.

También hay otros complementos para CVCS que le permiten integrar mercurial, pero AFAIK la subversión tiene el mismo problema.

No creo que haya una forma directa de hacerlo, pero siempre que pueda automatizar el proceso con algunos ganchos y scripts en una sola máquina Mercurial, sería lo suficientemente bueno.


Editar : Para aclarar las cosas un poco:

  • El tronco de Perforce se asigna a la rama predeterminada de Mercurial
  • La rama de Perforce R1 debe asignarse a la rama de lanzamiento-1 de Mercurial (lo mismo para R2, R3, etc.)
  • Cuando le digo a Mercurial que extraiga de forzar (es decir hg pull perforce, donde "forzar" es el nombre de la ruta que apunta al cliente de Perforce), debería extraer el enlace de Perforce al valor predeterminado de Mercurial.
  • Cuando le digo a Mercurial que extraiga de perforce-R1 (es decir hg pull perforce-R1, donde "perforce-R1" es la ruta al cliente R1), debe extraer la rama Perforce R1 a la rama "release-1" de Mercurial. Esta es la parte que estoy preguntando .

Estoy bastante seguro de que puedo ayudar con esto (ser un obsesivo mercurial y haber migrado de p4 a hg en el pasado), pero sería genial si pudiera agregar un diagrama que muestre el flujo de trabajo que pretende usar, solo para aclarar un poco las cosas.
Ed James

Respuestas:


0

No creo que esto se pueda hacer directamente.

Una opción sería usar la rebaseherramienta para mover las partes apropiadas del repositorio a la otra rama después de la extracción usando algo como los siguientes pasos:

  • Crear la rama deseada, p. Ej. hg branch release-1
  • Comprometer una nueva sucursal: hg commit -m "Created branch"
  • Tire del repositorio remoto a la rama mercurial predeterminada: hg pull perforce-R1
  • Rebase el nuevo tirón a la rama deseada: hg rebase -s <first changeset of perforce-R1> -d release-1

Creo que su respuesta es suficiente, sin embargo, estoy buscando una manera de hacerlo de manera más automática.
dukeofgaming
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.