GNU diff3 (fusión a tres bandas) da resultado inesperado
Pregunta
Supongamos que los archivos de mío y tuyo son descendientes de los viejos.
FILE_MINE =
abc def ghi
FILE_OLD =
abc jkl ghi
FILE_YOURS =
abc def ghi
diff3 -m MIND OLD YOURS
Comando da:
abc <<<<<<< OLD jkl ======= def >>>>>>> YOURS ghi
diff3 no puede resolver esa mina y los suyos hicieron cambios idénticos.
¿Por qué? Y, ¿hay una manera de resolver este problema?
Tickle su cerebro con esto:
diff OLD MIND
y diff OLD YOURS
tienen trozos idénticos en su salida.
2c2 < jkl --- > def
Si estos trozos no "cancelar-out" durante la fusión de tres vías?
Solución
¿Qué esperan tener?
A medida que el href="http://www.gnu.org/software/diffutils/manual/html_node/diff3-Merging.html#diff3-Merging" artículo describir diff3 utilidad dice:
Esta ... (fusión) deja de ser cierto cuando los tres archivos de entrada difieren o cuando sólo se diferencia de edad avanzada ; llamamos a esto un conflicto . Cuando los tres archivos de entrada diferentes, que llamamos el conflicto solapamiento
Por lo tanto, el caso que has descrito es tratado como un conflicto. '¿Porque?' usted puede preguntar. Debido a que el algoritmo diff3. Descripción se pueden encontrar en la misma página:
Se puede pensar en esto (la fusión) que restar mayor de el suyo y añadiendo el resultado a la mina , o como la fusión en mina de la Los cambios que se volvería más antigua en el suyo
No puede resolver adecuadamente las diferencias, ya que no tiene un contexto adecuado de que se realicen cambios.
Estoy de acuerdo con usted si usted va a decir que se debe trabajar utilizando algún otro método. Pero es lo que es. diff3 no es perfecto, yo recomendaría el uso de otras herramientas si quieres hacerlo bien, como se describe en el artículo