Recientemente, ha habido varias preguntas sobre cómo omitir cambios al mantener las ramas de lanzamiento en Mercurial. Por ejemplo:
- Mercurial: los cambios específicos de las ramas siguen volviendo después de la fusión ficticia
- ¿Por qué los retrocesos de Mercurial en una rama afectan a otras ramas?
Desde que se introdujo en 2.0, me he preguntado cómo usarlo graft
para evitar este problema. Dado un árbol de revisión como este:
A---B---C---D---E---F---G---H---I---J
Supongamos que necesitamos crear una rama de lanzamiento que omita el cambio Evil E
.
hg update -r D
hg graft "F::J"
dándonos:
A---B---C---D---E---F---G---H---I---J
\
--F'--G'--H'--I'--J'
- P1: ¿Qué acaba de pasar aquí? Puedo entender que
transplant
hubiera generado parchesF::J
y luego los hubiera aplicadoD
, perograft
se dice que usa la combinación de 3 vías en lugar de parches. Entonces ... ¿cómo funciona eso? ¿Por qué es mejor?
Digamos que ahora lo arreglo E
y lo fusiono en mi rama de lanzamiento.
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
M1 es una combinación directa; nada especial allí. M2 está fusionando ramas que tienen "los mismos" cambios (o al menos equivalentes).
- P2: ¿Es esta fusión sólo una combinación normal de 3 vías usando
D
,J'
yM1
? - P3: ¿Mercurial ha almacenado / utilizado información adicional sobre la operación de injerto para ayudarlo con la fusión?
Y finalmente...
- P4: ¿Cuáles son los problemas potenciales con un flujo como este?
P1: Ayuda cuando hay conflictos. Entonces puede usar su herramienta de fusión habitual (para mí son marcadores de conflicto en línea, que edito con el modo smerge de Emacs).
P2: Es una fusión normal.
Q3: No.
P4: Creo que es feo tener dos ramas casi idénticas.
fuente