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 perforce
para sincronizar,hg push
para 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-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 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 .
Respuestas:
No creo que esto se pueda hacer directamente.
Una opción sería usar la
rebase
herramienta para mover las partes apropiadas del repositorio a la otra rama después de la extracción usando algo como los siguientes pasos:hg branch release-1
hg commit -m "Created branch"
hg pull perforce-R1
hg rebase -s <first changeset of perforce-R1> -d release-1
fuente