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 --extcmd
w ostatniej części tej odpowiedzi)
$LOCAL
zawiera zawartość pliku z początkowej wersji i $REMOTE
zawiera zawartość pliku w wersji końcowej.
$BASE
zawiera zawartość pliku w wor
Jest zasadniczo git-mergetool
zmodyfikowany 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
, tkdiff
itp).
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 winmerge
wystarczy!
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 difftool
pomocą 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.cmd
dyrektywę 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.sh
skrypt : 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 --extcmd
opcji :
--extcmd=<command>
Podaj niestandardowe polecenie wyświetlania różnic. git-difftool
ignoruje skonfigurowane wartości domyślne i działa, $command $LOCAL $REMOTE
gdy ta opcja jest określona.
Na przykład w ten sposób gitk
można uruchomić / użyć dowolnego diff
narzędzia .