Kiedy piszę „git diff”, chciałbym zobaczyć różnicę obok siebie, na przykład „diff -y”, lub wyświetlić różnicę w interaktywnym narzędziu porównywania, takim jak „kdiff3”. Jak to zrobić?
git
git-diff
code-visualization
Mikrofon
źródło
źródło
Odpowiedzi:
Chociaż Git ma wewnętrzną implementację diff, możesz zamiast tego skonfigurować zewnętrzne narzędzie.
Istnieją dwa różne sposoby określenia zewnętrznego narzędzia porównywania:
GIT_EXTERNAL_DIFF
iGIT_DIFF_OPTS
zmienne środowiskowe.git config
Zobacz też:
git diff --help
Wykonując a
git diff
, Git sprawdza zarówno ustawienia powyższych zmiennych środowiskowych, jak i.gitconfig
plik.Domyślnie Git przekazuje następujące siedem argumentów do programu porównującego:
Zwykle potrzebujesz tylko parametrów starego i nowego pliku. Oczywiście większość narzędzi porównujących przyjmuje tylko dwie nazwy plików jako argumenty. Oznacza to, że musisz napisać mały skrypt opakowujący, który pobierze argumenty, które Git dostarcza do skryptu i przekaże je zewnętrznemu programowi git, który wybierzesz.
Powiedzmy, że umieściłeś swój skrypt opakowujący pod
~/scripts/my_diff.sh
:następnie musisz uczynić ten skrypt wykonywalnym:
Następnie musisz powiedzieć Gitowi, jak i gdzie znaleźć niestandardowy skrypt opakowujący różnice. Masz trzy możliwości, jak to zrobić: (wolę edytować plik .gitconfig)
Korzystanie
GIT_EXTERNAL_DIFF
,GIT_DIFF_OPTS
np. w swoim pliku .bashrc lub .bash_profile możesz ustawić:
Za pomocą
git config
użyj „git config”, aby określić, gdzie można znaleźć twój skrypt opakowujący:
Edycja
~/.gitconfig
plikumożesz edytować
~/.gitconfig
plik, aby dodać następujące wiersze:Uwaga:
Podobnie jak w przypadku instalowania niestandardowego narzędzia porównywania, możesz również zainstalować niestandardowe narzędzie do scalania, które może być wizualnym narzędziem do scalania, aby lepiej pomóc w wizualizacji scalania. (patrz strona progit.org)
Zobacz: http://fredpalma.com/518/visual-diff-and-merge-tool/ i https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
źródło
meld
,?meld
wersję można skonfigurować tak, aby wykonywała porównywanie katalogu, w którym mogę wybrać plik (i), dla których chcę zobaczyć różnicę? Obecnie uruchamia osobnemeld
polecenie dla każdego pliku i muszę wyjśćmeld
, aby zobaczyć następny plik. Wolałbym raczejmeld
pokazać listę katalogów zmienionych plików, tak jak zachowuje się, gdymeld
jest używany z Mercurial.Spróbuj git difftool
Użyj
git difftool
zamiastgit diff
. Nigdy nie wrócisz.UPDATE, aby dodać przykładowe użycie:
Oto link do innego stosu, który mówi o
git difftool
: Jak wyświetlić wynik „git diff” za pomocą mojego preferowanego narzędzia / przeglądarki porównywania?Nowsze wersje
git
Thedifftool
komenda obsługuje wiele zewnętrznych narzędzi diff out-of-the-box. Na przykładvimdiff
jest obsługiwany automatycznie i można go otworzyć z wiersza poleceń przez:Inne obsługiwane zewnętrzne narzędzia porównujące są wymienione w poniższym
git difftool --tool-help
przykładzie:źródło
This message is displayed because 'diff.tool' is not configured.
. Być może zaktualizuj odpowiedź z minimalną konfiguracją tego elementu, aby wyświetlała obok siebie różnice w terminalu, o co prosił OP? Narzędzia GUI są zupełnie bezużyteczne na zdalnym serwerze, na którym łączysz się za pomocą ssh.git difftool
zvimdiff
nie zawsze ustawia poprawnie dwa pliki / bufory.git difftool -y
aby zapobiec podpowiedziom tkdiffgit difftool
in Windows i Linux: stackoverflow.com/a/48979939/4561887Możesz też spróbować
git diff --word-diff
. To nie jest dokładnie obok siebie, ale w jakiś sposób lepsze, więc możesz preferować to od rzeczywistych potrzeb.źródło
git diff --word-diff=color
--word-diff=color
daje mi błąd nieprawidłowej opcji. W której wersji został wprowadzony?git diff --color-words
działa.git diff --color-words
to sposób na przejście na nowoczesne wersje gita.ydiff
Dawniej nazywane
cdiff
, to narzędzie może wyświetlić obok siebie , przyrostem i kolorowe diff.Zamiast
git diff
robić:Spowoduje to uruchomienie
ydiff
w trybie wyświetlania obok siebie dla każdego z plików z różnicami.Zainstaluj za pomocą:
-lub-
Dla
git log
, można użyć:-w0
automatycznie wykrywa szerokość terminala. Zobaczydiff
stronę repozytorium GitHub, aby uzyskać szczegółowe informacje i wersję demonstracyjną.Testowane w Git 2.18.0, ydiff 1.1.
źródło
git diff | cdiff -s
z icdiff?ydiff -s
z obszaru roboczego git / svn / hg, nie musisz sięcd <git repo>
a następnie uruchomićydiff -ls <path/to/file>
Możesz zrobić to obok siebie,
diff
używającsdiff
:gdzie
HEAD^
jest przykład, który powinieneś zastąpić czymkolwiek chcesz porównać.Znalazłem to rozwiązanie tutaj, gdzie jest też kilka innych sugestii. Jednak ta jedna odpowiedź jest zwięzła i jasna na pytanie PO.
Zobacz man git-difftool po wyjaśnienie argumentów.
Biorąc pod uwagę komentarze, możesz utworzyć przydatne
git sdiff
polecenie, pisząc następujący skrypt wykonywalny:Zapisz to jako
/usr/bin/git-sdiff
ichmod -x
to. Wtedy będziesz mógł to zrobić:źródło
tput cols
zamiast, na przykład:git difftool -x "sdiff -s -w $(tput cols)"
.to po prostu:
źródło
Jeśli chcesz zobaczyć równoległe różnice w przeglądarce bez angażowania GitHub, możesz cieszyć się git webdiff , zastępczym zamiennikiem dla
git diff
:Oferuje to szereg zalet w porównaniu z tradycyjnymi narzędziami różnicowymi GUI, na przykład
tkdiff
podświetlenie składni i wyświetlanie różnic w obrazach.Przeczytaj więcej na ten temat tutaj .
źródło
Używam colordiff .
W systemie Mac OS X zainstaluj go z
W Linuksie jest prawdopodobnie
apt get install colordiff
lub coś takiego, w zależności od twojej dystrybucji.Następnie:
Lub utwórz alias
Wtedy możesz go użyć
Nazwałem to „diffy”, ponieważ
diff -y
jest to różnica side-by-side w unixie. Colordiff dodaje też kolory, które są ładniejsze. W opcji-ydw
,y
jest side-by-strony,w
jest ignorowanie spacje, ad
to w celu uzyskania minimalnej diff (zwykle można dostać lepszy wynik jako diff)źródło
-y
aby pominąćLaunch 'colordiff' [Y/n]:
monit.git alias diffy "difftool --extcmd=\"colordiff -ydw\""
? Nie powinno byćgit config --global alias.diffy "difftool --extcmd=\"colordiff -ydw\""
?Dla unixa, łączenie samego
git
i wbudowanegodiff
:Oczywiście możesz zamienić HEAD na dowolne inne odniesienie do gita i prawdopodobnie chcesz dodać coś podobnego
-W 170
do polecenia diff.Zakłada się, że właśnie porównujesz zawartość katalogu z poprzednim zatwierdzeniem. Porównanie dwóch zatwierdzeń jest bardziej złożone. Jeśli twoja powłoka to
bash
, możesz użyć "podstawienia procesu":gdzie
REF1
iREF2
są referencjami git - tagami, gałęziami lub skrótami.źródło
Osobiście bardzo lubię icdiff !
Jeśli jesteś na
Mac OS X
zHomeBrew
, po prostu zrobićbrew install icdiff
.Aby poprawnie uzyskać etykiety plików oraz inne fajne funkcje, mam w moim
~/.gitconfig
:I używam go tak:
git difftool
źródło
To pytanie pojawiło się, gdy szukałem szybkiego sposobu wykorzystania wbudowanego sposobu git do lokalizowania różnic. Moje kryteria rozwiązania:
Znalazłem tę odpowiedź, aby uzyskać kolor w git.
Aby uzyskać różnicę obok siebie zamiast różnic liniowych, poprawiłem doskonałą odpowiedź mb14 na to pytanie za pomocą następujących parametrów:
Jeśli nie podoba ci się dodatkowa [- lub {+] opcja
--word-diff=color
może zostać użyta.Pomogło to uzyskać prawidłowe porównanie z tekstem json i xml oraz kodem java.
Podsumowując,
--word-diff-regex
opcje mają pomocną widoczność wraz z ustawieniami kolorów, aby uzyskać pokolorowany obok siebie kod źródłowy w porównaniu do standardowego porównania linii, podczas przeglądania dużych plików z małymi zmianami linii.źródło
Kilku innych wspomniało już o cdiff dla porównywania side-by-side przez git, ale nikt nie dał pełnej implementacji.
Konfiguracja cdiff:
Edytuj ~ / .gitconfig, wstawiając te linie:
Pager off jest potrzebny, aby cdiff działał z Diff, i tak jest to zasadniczo pager, więc jest w porządku. Difftool będzie działać niezależnie od tych ustawień.
Alias show jest potrzebny, ponieważ git show obsługuje tylko zewnętrzne narzędzia porównujące poprzez argument.
Ważny jest znak „#” na końcu zewnętrznego polecenia diff. Polecenie diff Gita dołącza $ @ (wszystkie dostępne zmienne diff) do polecenia diff, ale chcemy tylko dwóch nazw plików. Więc wywołujemy te dwa wyraźnie za pomocą 2 $ i 5 $, a następnie ukrywamy $ @ za komentarzem, który w innym przypadku zmyliłby sdiff. Powoduje to błąd, który wygląda tak:
Polecenia Git, które teraz generują porównywanie obok siebie:
Użycie Cdiff:
Masz teraz porównywanie side-by-side za pośrednictwem git diff i difftool. I masz kod źródłowy cdiff python do dostosowywania użytkownika, jeśli będziesz go potrzebować.
źródło
Oto podejście. Jeśli przepuścisz przez less, szerokość xterm jest ustawiona na 80, co nie jest takie gorące. Ale jeśli wykonasz polecenie np. COLS = 210, możesz wykorzystać rozszerzony xterm.
źródło
Otwórz Intellij IDEA , wybierz pojedyncze lub wiele zatwierdzeń w oknie narzędzia „Kontrola wersji”, przeglądaj zmienione pliki i kliknij je dwukrotnie, aby sprawdzić zmiany obok siebie dla każdego pliku.
Dzięki dołączonemu programowi uruchamiającemu wiersz poleceń możesz przenieść IDEA w dowolnym miejscu za pomocą prostego
idea some/path
źródło
W tym wątku jest wiele dobrych odpowiedzi. Moim rozwiązaniem tego problemu było napisanie scenariusza.
Nazwij to `` git-scriptname '' (i uczyń go wykonywalnym i umieść go w swojej PATH, jak każdy skrypt) i możesz wywołać go jak normalne polecenie git, uruchamiając
Rzeczywista funkcjonalność to tylko ostatnia linia. Oto źródło:
źródło
To może być nieco ograniczone rozwiązanie, ale działa przy użyciu polecenia systemu
diff
bez zewnętrznych narzędzi:--suppress-common-lines
(jeśli Twojadiff
opcja obsługuje tę opcję).diff
markery--width=term-width
; w Bash można uzyskać szerokość jako$COLUMNS
lubtput cols
.Można to również umieścić w pomocniczym skrypcie git dla większej wygody, na przykład w następujący sposób:
źródło