Aby uzupełnić moją poprzednią odpowiedź konfiguracyjną „diff.external” powyżej:
Jak wspomniał Jakub , Git 1.6.3 wprowadził git difftool , pierwotnie zaproponowany we wrześniu 2008 roku:
USAGE = '[--tool=tool] [--commit=ref] [--start=ref --end=ref] [--no-prompt] [file to merge]'
(Zobacz --extcmdw ostatniej części tej odpowiedzi)
$LOCAL zawiera zawartość pliku z początkowej wersji i $REMOTE zawiera zawartość pliku w wersji końcowej.
$BASEzawiera zawartość pliku w wor
Jest zasadniczo git-mergetoolzmodyfikowany do działania na indeksie / drzewie roboczym git.
Sprawa stosowanie zwykle dla tego skryptu jest, gdy masz albo tymczasowe lub Unstaged zmiany i chcesz, aby zobaczyć zmiany w przeglądarce side-by-side (np diff xxdiff, tkdiffitp).
git difftool [<filename>*]
Innym przypadkiem użycia jest to, że chcesz zobaczyć te same informacje, ale porównujesz arbitralne zatwierdzenia (jest to część, w której parsowanie rewarg może być lepsze)
git difftool --start=HEAD^ --end=HEAD [-- <filename>*]
Ostatni przypadek użycia ma miejsce, gdy chcesz porównać swój obecny zestaw roboczy z czymś innym niż HEAD (np. Tag)
git difftool --commit=v1.0.0 [-- <filename>*]
Uwaga: od wersji Git 2.5 git config diff.tool winmergewystarczy!
Zobacz „ git Combetool Winmerge ”
A od wersji Git 1.7.11 masz taką opcję--dir-diff , aby spawnować zewnętrzne narzędzia porównywania, które mogą porównywać dwie hierarchie katalogów jednocześnie po zapełnieniu dwóch katalogów tymczasowych, zamiast uruchamiać instancję narzędzia zewnętrznego raz na parę plików.
Przed Git 2.5:
Praktyczny przypadek konfiguracji za difftoolpomocą niestandardowego narzędzia do porównywania:
C:\myGitRepo>git config --global diff.tool winmerge
C:\myGitRepo>git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
C:\myGitRepo>git config --global difftool.prompt false
Dzięki winmerge.sh zapisanemu w części katalogu ŚCIEŻKI:
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" -u -e "$1" "$2" -dl "Local" -dr "Remote"
Jeśli masz inne narzędzie (kdiff3, P4Diff, ...), utwórz kolejny skrypt powłoki i odpowiednią difftool.myDiffTool.cmddyrektywę konfiguracji.
Następnie możesz łatwo przełączać narzędzia za pomocądiff.tool config.
Masz również ten wpis na blogu autorstwa Dave'a, aby dodać inne szczegóły.
(Lub to pytanie dowinmergeu opcji)
Zainteresowaniem tym ustawieniem jest winmerge.shskrypt : możesz go dostosować, aby uwzględnić specjalne przypadki.
Patrz na przykład David Marble „s odpowiedź poniżej dla przykładu, który zajmuje się:
- nowe pliki pochodzenia lub przeznaczenia
- usunięto pliki w miejscu początkowym lub docelowym
Jak Kem Mason wspomina w swojej odpowiedzi , możesz również uniknąć dowolnego opakowania, korzystając z --extcmdopcji :
--extcmd=<command>
Podaj niestandardowe polecenie wyświetlania różnic. git-difftoolignoruje skonfigurowane wartości domyślne i działa, $command $LOCAL $REMOTEgdy ta opcja jest określona.
Na przykład w ten sposób gitkmożna uruchomić / użyć dowolnego diffnarzędzia .