Załóżmy, że Ty i Twój znajomy wyewidencjonowaliście plik i wprowadziliście w nim pewne zmiany. Usunąłeś linię na początku, a twój znajomy dodał linię na końcu. Następnie zatwierdził swój plik i musisz scalić jego zmiany w swojej kopii.
Jeśli wykonywałeś dwukierunkowe scalanie (innymi słowy, różnicę), narzędzie mogłoby porównać dwa pliki i zobaczyć, że pierwsza i ostatnia linia są różne. Ale skąd miałoby wiedzieć, co zrobić z różnicami? Czy scalona wersja powinna zawierać pierwszą linię? Czy powinien zawierać ostatnią linię?
Dzięki scaleniu trójstronnemu może porównać dwa pliki, ale może również porównać każdy z nich z oryginalną kopią (zanim którykolwiek z was go zmieni). Więc może zobaczyć, że usunąłeś pierwszą linię, a twój znajomy dodał ostatnią linię. I może wykorzystać te informacje do stworzenia wersji scalonej.
Ten slajd z prezentacji o konieczności jest interesujący:
źródło
Napisałem o tym bardzo szczegółowy post . Zasadniczo nie można śledzić usuwania / dodawania w obie strony, bardzo, bardzo nieproduktywne.
źródło
Scalanie trójstronne, w którym dwa zestawy zmian w jednym pliku podstawowym są scalane podczas ich stosowania, w przeciwieństwie do stosowania jednego, a następnie scalania wyniku z drugim.
Na przykład wprowadzenie dwóch zmian, w których linia jest dodana w tym samym miejscu, można zinterpretować jako dwie zmiany, a nie zmianę jednej linii.
Na przykład
plik a został zmodyfikowany przez dwie osoby, jedną dodającą łosia, drugą dodającą mysz.
Teraz, jeśli połączymy zestawy zmian podczas ich stosowania, otrzymamy (3-way merge)
Ale jeśli zastosujemy b, to spójrz na zmianę z b na c, będzie wyglądać tak, jakbyśmy po prostu zmienili „u” na „o” (scalanie dwukierunkowe)
źródło