GNU diff3 (fusion à trois voies) donne des résultats inattendus
Question
Supposons que les fichiers et YOURS MINE sont les descendants de l'ancien.
FILE_MINE =
abc def ghi
FILE_OLD =
abc jkl ghi
FILE_YOURS =
abc def ghi
Commande diff3 -m MIND OLD YOURS
donne:
abc <<<<<<< OLD jkl ======= def >>>>>>> YOURS ghi
diff3 ne peut pas résoudre ce MINE et YOURS a apporté des modifications identiques.
Pourquoi? Et, est-il possible de résoudre ce problème?
Tickle votre cerveau avec ceci:
diff OLD MIND
et diff OLD YOURS
ont Hunks identiques dans leur production.
2c2 < jkl --- > def
Si ces Hunks pas « neutraliseront » lors de la fusion à trois voies?
La solution
Qu'est-ce que vous vous attendez à avoir?
article décrivant diff3 utilitaire dit:
... Cette (fusion) ne parvient pas à être vrai lorsque les trois fichiers d'entrée diffèrent ou lorsque seulement plus varie ; nous appelons conflit . Lorsque les trois fichiers d'entrée diffèrent, que nous appelons un conflit chevauchement
Par conséquent, le cas que vous avez décrit est traité comme un conflit. «Pourquoi donc? vous pourriez demander. En raison de l'algorithme diff3. Description vous pouvez trouver à la même page:
Vous pouvez penser à cette (fusion) en soustrayant plus de le vôtre et en ajoutant le résultat à mien , ou la fusion dans le mien la Les changements qui tournerait plus dans le vôtre
Il ne peut pas résoudre les différences correctement parce qu'il ne dispose pas d'un contexte de changements apportés.
Je suis d'accord avec vous si vous allez dire que cela devrait fonctionner à l'aide d'une autre approche. Mais ... il est ce qu'il est. diff3 est pas parfait, je vous conseille d'utiliser d'autres outils si vous voulez le faire correctement, comme décrit dans le article