GNU diff3 (a tre vie merge) dà risultato inatteso
Domanda
Si supponga che i file di mio e tuo sono i discendenti di OLD.
FILE_MINE =
abc def ghi
FILE_OLD =
abc jkl ghi
FILE_YOURS =
abc def ghi
Comando diff3 -m MIND OLD YOURS
dà:
abc <<<<<<< OLD jkl ======= def >>>>>>> YOURS ghi
diff3 non può risolvere che mio e tuo apportate modifiche identiche.
Perché? E, c'è un modo per risolvere questo problema?
Tickle il tuo cervello con questo:
diff OLD MIND
e diff OLD YOURS
hanno grossi pezzi identici nella loro produzione.
2c2 < jkl --- > def
Qualora questi fusti non "cancella-out" durante la tre vie unione?
Soluzione
Che cosa si aspetta di avere?
articolo che descrive diff3 utilità dice:
... Questo (la fusione) non riesce ad essere vero quando tutte e tre le file di input differiscono o quando differisce solo anziani ; chiamiamo questo un conflitto . Quando tutti e tre i file di input diversi, che noi chiamiamo un conflitto sovrapposizione
Pertanto, il caso che hai descritto è trattata come un conflitto. 'Perchè così?' si potrebbe chiedere. A causa dell'algoritmo diff3. Descrizione si possono trovare presso la stessa pagina:
Si può pensare a questo (la fusione) come sottraendo anziani da tuo e aggiungendo il risultato al mine , o come la fusione in miniera cambiamenti che girare più anziani in yours
Non si può risolvere le differenze correttamente perché esso non dispone di un adeguato contesto dei cambiamenti in corso.
Sono d'accordo con te, se hai intenzione di dire che dovrebbe funzionare utilizzando qualche altro approccio. Ma ... è quello che è. diff3 non è perfetto, mi consiglia di utilizzare altri strumenti, se si vuole farlo bene, come descritto nella articolo