Integrando diferentes ramas de fuentes externas en un solo repositorio de Mercurial

8

Editar : haciendo esto aún más claro ya que la recompensa está a punto de caducar: ¿hay una manera de importar el historial (extrayendo de diferentes SCM) directamente a una rama específica con Mercurial?

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

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

  • Por lo tanto, cree un "cliente", que es una especie de descripción de lo que se actualizará / desprotegerá constantemente. Esto solo puede dirigirse a una rama a la vez (troncal u otra).
  • Una vez que haces esto, ejecuta hg clone p4://<server>/<client_name>
  • Vaya a .hg / hgrc y coloque la línea de la ruta de perforación: perforce = p4://<server>/<client_name>
  • Trabaja normalmente con el código en mercurial, haz hg pull perforce para sincronizar, hg push para exportar una lista de cambios

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

Me gustaría poder hacer algo como hg pull perforce-R5 y 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 te permiten integrar mercurial, pero AFAIK la subversión tiene el mismo problema.

No creo que haya una manera directa de hacer esto, pero mientras pueda automatizar el proceso con algunos enganches y scripts en una sola máquina Mercurial, eso sería suficiente.

Editar : para aclarar un poco las cosas:

  • Perforce trunk se asigna a la rama por defecto de Mercurial
  • La rama
  • Perforce R1 debe asignarse a la rama release-1 de Mercurial (igual para R2, R3, etc.)
  • Cuando le digo a Mercurial que extraiga desde la fuerza (es decir, hg pull perforce , donde "perforación" es el nombre de la ruta que apunta al cliente de Perforce) debería colocar la troncal Perforce en el valor predeterminado de Mercurial.
  • Cuando le digo a Mercurial que extraiga desde la perforación R1 (es decir, hg pull perforce-R1 , donde "perforación-R1" es la ruta hacia el cliente R1) debería tirar la rama Perforce R1 a la rama "liberación-1" de Mercurial. ESTA ES LA PARTE QUE ESTÁ SOLICITANDO .
pregunta dukeofgaming 18.06.2012 - 03:22

1 respuesta

0

No creo que esto pueda hacerse directamente.

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

  • Crea la rama deseada, por ejemplo, %código%
  • Cometer nueva rama: hg branch release-1
  • Tire del repositorio remoto a la rama mercurial predeterminada: hg commit -m "Created branch"
  • Rebase el nuevo tirón a la rama deseada: hg pull perforce-R1
respondido por el Scroog1 26.06.2012 - 16:03

Lea otras preguntas en las etiquetas