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.
Składnia
Dział zatytułowany „Składnia”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.
Parametry
Dział zatytułowany „Parametry”Parametr | Opis |
---|---|
-m | Tworzy scalony wynik z markerami konfliktów <<<<<<< , ======= , >>>>>>> . |
-e | Generuje skrypt ed dodający różnice plików 2 i 3 do 1. |
-E | Jak -e , lecz pozostawia marker . kończący skrypt ed. |
-x | Wypisuje tylko listę rozbieżności wraz z etykietami. |
-X | Jak -x , ale pomija identyczne sekcje. |
-a | Traktuje pliki binarne jako tekst (ASCII). |
-i | Ignoruje różnice w wielkości liter. |
-w | Ignoruje 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-cr | Usuwa końcowe CR z linii (pliki Windows). |
--diff-program=<plik> | Używa alternatywnej ścieżki do programu diff (dla porównań dwustr.) |
Przykłady użycia
Dział zatytułowany „Przykłady użycia”# 1. Automatyczne scalenie trzech wersji i zapis do plikudiff3 -m base.txt local.txt remote.txt > merged.txt
# 2. Scalanie z etykietami w markerach konfliktówdiff3 -m -L BASE -L MÓJ -L ICH base.txt local.txt remote.txt > wynik.txt
# 3. Lista konfliktów bez scalaniadiff3 -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
przygit 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.
Najczęściej spotykane błędy i jak je naprawić
Dział zatytułowany „Najczęściej spotykane błędy i jak je naprawić”Błąd / Komunikat | Przyczyna | Rozwiązanie |
---|---|---|
diff3: missing operand after 'plik3' | Podano mniej niż trzy pliki | Wskaż dokładnie trzy ścieżki plików do porównania. |
diff3: file not found | Nie istnieje jeden z plików | Zweryfikuj ścieżki lub wypakuj brakujący plik z repozytorium. |
Marker konfliktu w scalonym pliku | Sekcje sprzeczne między LOCAL i REMOTE | Ręcznie edytuj obszar między <<<<<<< a >>>>>>> , usuń znaczniki i zachowaj finalną wersję. |
Za dużo konfliktów | Różnice w białych znakach lub kodowaniu | Dodaj -w , -i , --strip-trailing-cr lub skonwertuj pliki do wspólnego formatu. |
Linki i źródła
Dział zatytułowany „Linki i źródła”- man diff3 – oficjalna dokumentacja.
- GNU diffutils – diff3 – pełny manual online.
- Pro Git – Merge and Diff – przykłady integracji.