Przejdź do głównej zawartości

diff3


  • diff3 – program z pakietu GNU diffutils służący do porównywania trzech wersji tego samego pliku (BASE, LOCAL, REMOTE) oraz generowania zintegrowanej wersji zawierającej naniesione zmiany i znaczniki konfliktów.
  • Umożliwia automatyczne scalenie (-m), raportowanie różnic w formacie ed (-e, -E) lub enumerację rozbieżności (-x, -X).
  • Wykorzystywany przez systemy kontroli wersji (Git, CVS, Mercurial) podczas operacji merge i rebase.
  • Dostępny w większości dystrybucji Linuksa, macOS, BSD oraz w środowiskach POSIX.

Okno terminala
diff3 [opcje] plik1 plik2 plik3
  • Argumenty zwykle odpowiadają kolejno: BASE (wspólny przodek), LOCAL (twoje zmiany), REMOTE (zmiany innych).
  • W trybie scalania (-m) wynik wypisywany jest na stdout lub zapisywany do pliku przekierowaniem.

ParametrOpis
-mTworzy scalony wynik z markerami konfliktów <<<<<<<, =======, >>>>>>>.
-eGeneruje skrypt ed dodający różnice plików 2 i 3 do 1.
-EJak -e, lecz pozostawia marker . kończący skrypt ed.
-xWypisuje tylko listę rozbieżności wraz z etykietami.
-XJak -x, ale pomija identyczne sekcje.
-aTraktuje pliki binarne jako tekst (ASCII).
-iIgnoruje różnice w wielkości liter.
-wIgnoruje wszystkie białe znaki.
-L <etykieta>Ustawia własną nazwę pliku w znacznikach konfliktu; można podać trzy razy (kolejno dla plik1‑3).
--strip-trailing-crUsuwa końcowe CR z linii (pliki Windows).
--diff-program=<plik>Używa alternatywnej ścieżki do programu diff (dla porównań dwustr.)

Okno terminala
# 1. Automatyczne scalenie trzech wersji i zapis do pliku
diff3 -m base.txt local.txt remote.txt > merged.txt
# 2. Scalanie z etykietami w markerach konfliktów
diff3 -m -L BASE -L MÓJ -L ICH base.txt local.txt remote.txt > wynik.txt
# 3. Lista konfliktów bez scalania
diff3 -x base.txt local.txt remote.txt

  • Porządek argumentów ma znaczenie: diff3 A B C zakłada, że B i C pochodzą z A; błędna kolejność wygeneruje mylące konflikty.
  • Konflikty: Sekcje nierozwiązane są opatrzone znacznikami, które należy manualnie zedytować.
  • Integracja z Git: Git używa diff3 przy git merge --diff3 do bogatszych markerów z bazową wersją.
  • Pliki binarne: Bez -a narzędzie może potraktować pliki binarne jako różne w całości.
  • Wydajność: Dla dużych plików tekstowych można łączyć -m z -w lub --strip-trailing-cr, aby zmniejszyć liczbę konfliktów pozornych.

Błąd / KomunikatPrzyczynaRozwiązanie
diff3: missing operand after 'plik3'Podano mniej niż trzy plikiWskaż dokładnie trzy ścieżki plików do porównania.
diff3: file not foundNie istnieje jeden z plikówZweryfikuj ścieżki lub wypakuj brakujący plik z repozytorium.
Marker konfliktu w scalonym plikuSekcje sprzeczne między LOCAL i REMOTERęcznie edytuj obszar między <<<<<<< a >>>>>>>, usuń znaczniki i zachowaj finalną wersję.
Za dużo konfliktówRóżnice w białych znakach lub kodowaniuDodaj -w, -i, --strip-trailing-cr lub skonwertuj pliki do wspólnego formatu.