¿Mercurial siempre está utilizando las herramientas de combinación externas cuando dos ramas que se fusionan tienen cambios en el mismo archivo?Mercurial y fusionar herramientas?
¿O primero se ve si se puede fusionar el archivo en sí, y solo punting a la herramienta externa si no puede?
La razón por la que estoy pidiendo es que soy (una vez más) releyendo lo tutorial written by Joel Spolsky on Mercurial y uno dice, al comparar la forma en Subversion y Mercurial es la fusión es que:
Por el contrario, mientras trabajábamos por separado en Mercurial, Mercurial estaba ocupado manteniendo una serie de conjuntos de cambios. Entonces, cuando queremos fusionar nuestro código, Mercurial en realidad tiene mucha más información: sabe lo que cada uno de nosotros cambió y puede volver a aplicar esos cambios, en lugar de solo mirar el producto final e intentar adivinar cómo expresarlo. juntos.
Solo que mi experiencia me dice que parece implicar la herramienta de fusión externa cuando dos ramas tienen cambios en los mismos archivos. Y, por lo tanto, ¿eso no hace que el argumento anterior sea incorrecto?
o debería interpretar esto como sigue:
- Subversion sólo combina el estado final de las dos ramas, y tiene más trabajo que hacer en una sola unidad
- Mercurial se funde cada conjunto de cambios de forma individual, lo que permite para que funcione con unidades de cambios más pequeñas, con mayores posibilidades de éxito de fusión
¿Alguien puede arrojar algo de luz sobre esto?
Editar: Déjeme darle un ejemplo:
@echo off
setlocal
if exist repo rd /s /q repo
md repo
cd repo
hg init .
rem --- version 0 ---
echo 1 >test.txt
echo 2 >>test.txt
echo 3 >>test.txt
echo 4 >>test.txt
echo 5 >>test.txt
hg add test.txt
hg commit -m "v0"
rem --- version 1 ---
echo 1 >test.txt
echo 2 v1 >>test.txt
echo 3 >>test.txt
echo 4 >>test.txt
echo 5 >>test.txt
hg commit -m "v1"
rem --- version 2 ---
hg update 0
echo 1 >test.txt
echo 2 >>test.txt
echo 3 >>test.txt
echo 4 v2 >>test.txt
echo 5 >>test.txt
hg commit -m "v2"
rem --- merge ---
hg update 1
hg merge 2
Esta primera crea un archivo con el siguiente contenido:
1
2
3
4
5
Luego se cambia a:
1
2 v1
3
4
5
Entonces va de nuevo a la versión inicial (conjunto de cambios), y lo cambia a:
1
2
3
4 v2
5
Entonces se intenta combinar los dos.
Ahora, según la (única) respuesta actual, esto no debería ser un problema, ya que los cambios no están en conflicto.
Sin embargo, en este punto, se invoca Beyond Compare (mi herramienta de combinación externa).
Consulte mi pregunta editada –
Disculpa, mientras editaba editaba. Debería ser más claro ahora. Los criterios para la invocación de mergetool son cambios en el mismo archivo, lo cual es perfectamente razonable. –