¿Flujo de trabajo para "backport" cambiar en diferentes twigs Mercurial (Hg)?

Tenemos dos cabezas Uno es nuestro jefe de desarrollo principal y el otro es uno que olvidé hasta el día de hoy. Encontramos un error y lo arreglamos en nuestra twig de desarrollo principal, y me di count de que también debería arreglarse en la twig anterior.

Creo que hubiera sido mejor hacer el cambio en la twig anterior y fusionar eso con la twig actualizada, pero no lo hicimos de esa manera. ¿Puede mercurial manejar esto? No hemos intentado hacer algo como esto y realmente no puedo entender cómo se haría.

Sí, tienes dos buenas opciones:

Injerto: nuevo en Mercurial 2.0

Esta versión introdujo el command de injerto que puede respaldar los cambios de una manera inteligente. La "inteligencia" es que usará fusiones internamente y esto significa que obtienes

  • Soporte para cambiar el nombre: imagine que ha solucionado el error en el file foo.c en la twig de desarrollo. En la twig de mantenimiento anterior foo.c se llamaba bar.c Usando hg graft , el cambio a foo.c se puede combinar correctamente en la antigua bar.c .

  • Combinación de tres vías: el injerto implica girar el gráfico y fundirse en ese gráfico temporal. La ventaja de las combinaciones a tres bandas es que puede usar su herramienta de fusión gráfica normal para resolver conflictos.

Para copyr la punta del default en old-branch simplemente ejecuta

 $ hg update old-branch $ hg graft default 

Trasplante: versiones anteriores

Antes de que tuviéramos el command de injerto, la extensión de trasplante era el path a seguir. Esta simple extensión exportará un set de cambios como un parche y tratará de aplicar el parche a alguna otra revisión.

Debido a que estamos lidiando con parches "tontos", las cosas como cambiar el nombre no se tomarán en count y no obtendrá soporte para su herramienta de combinación, ya que no existe una combinación de tres vías. A pesar de esto, he descubierto que el trasplante funciona muy bien en la práctica.

Usar trasplante es simple:

 $ hg update old-branch $ hg transplant default 

Esto está muy cerca de correr

 $ hg update old-branch $ hg export default | hg import - 

excepto que el trasplante también agrega una porción de metadatos que registra el set de cambios original en el set de cambios trasplantado. Esto se puede usar para omitir trasplantes futuros.