Projekt Open Source Trac ma doskonałe wyróżnienie różnic - podświetla zmienione linie i zmienione bajty w każdej zmienionej linii! Przykłady można znaleźć tutaj lub tutaj .
Czy istnieje sposób na użycie tego samego koloru podświetlenia (tj. Zmienionych linii i zmienionych bajtów ) w terminalu bash git
, lub vim
dla wyjścia różnicowego (plik łatki)?
Odpowiedzi:
diff-highlight
Skrypt Perl contrib produkuje wyjście tak podobna do screenów Trac, że jest prawdopodobne, że Trac używa go:Zainstaluj za pomocą:
Przenieś plik
diff-highlight
do~/bin/
katalogu (lub gdziekolwiek jesteś$PATH
), a następnie dodaj następujące elementy do~/.gitconfig
:Pojedyncza kopia wklej sugerowana przez @cirosantilli:
źródło
git add -p
. Proszę również dodać:git config --global interactive.diffFilter diff-highlight
Używając
git diff
lubgit log
i być może innych, użyj opcji--word-diff=color
(przy okazji są też inne tryby dla różnic między słowami)źródło
--word-diff=color
jest naprawdę lepszy (zwłaszcza zgit config color.diff.old "red reverse"
igit config color.diff.new "green reverse"
), ale nie tego chcę :(git add --patch
: stackoverflow.com/questions/10873882/ ...diff-highlight
jest to, że działa dobrze zarówno w przypadku różnic między słowami, jak i wierszami.diff-so-fancy
todiff
rozświetlacz przeznaczony do ludzkich gałek ocznych.Usuwa początkowe
+
/,-
które są irytujące przy wycinaniu / wklejaniu i zapewnia wyraźne sekcje między plikami.Kolorowe
git
(po lewej) vsdiff-so-fancy
(po prawej - zwróć uwagę na wyróżnienia na poziomie postaci):Jeśli chcesz, aby
diff-so-fancy
wyjście (po prawej stronie) nie było ograniczone do plików wgit
repozytorium, dodaj następującą funkcję do swojej,.bashrc
aby użyć jej na dowolnych plikach:Na przykład:
Podświetlanie poziomu postaci i standardowy
diff
formatJeśli nie podoba ci się niestandardowe formatowanie
diff-so-fancy
, ale nadal chceszgit
podświetlać na poziomie znaków , użyj tego,diff-highlight
co weźmiegit
dane wyjściowe i utworzy naprawdę całkiem standardowediff
wyjście w formacie:Aby używać go domyślnie z dnia
git
, dodaj do.gitconfig
:[pager]
Odcinek opowiadagit
zamontowanie jej już colourised wyjście dodiff-highlight
którego colourises na poziomie znaków, a następnie strony wyjście na mniej (w razie potrzeby), a nie tylko przy użyciu domyślnegoless
.źródło
gitconfig
opcje?dsf()
.Zachowanie, które chcesz, jest teraz dostępne w samym git (jak wskazano w komentarzu nigt101). Aby to włączyć, musisz ustawić pager na
gdzie
/usr/share/doc/git/contrib/diff-highlight/diff-highlight
jest lokalizacja skryptu wyróżniającego na Ubuntu 13.10 (nie mam pojęcia, dlaczego znajduje się wdoc
folderze). Jeśli nie ma go w twoim systemie, spróbujlocate diff-highlight
go znaleźć. Zauważ, że skrypt podświetlania nie jest wykonywalny (przynajmniej na moim komputerze), stąd wymógperl
.Aby zawsze używać zakreślacza dla różnych poleceń podobnych do różnic, po prostu dodaj do
~/.gitconfig
pliku:Dodałem to jako nowa odpowiedź, komentarz nict101 jest zakopany, a ponieważ konfiguracja nie jest tak banalna, jak powinna, i przynajmniej w wersji Ubuntu, że mam instrukcje w pliku README nie działają.
źródło
git add -p
(tryb interaktywny). Nie wiem jednak, jak można to naprawić, po prostu dodanie add do listy powoduje zawieszenie się.git config interactive.diffFilter diff-highlight
diff-highlight
nie był na mojej drodze, więc musiałem go najpierw zlokalizować. Szczegóły w mojej odpowiedzi poniżej.Narzędzie do różnic opartych na bajtach jest dystrybuowane z oficjalnym Gitem od wersji 1.7.8 1 . Musisz tylko zlokalizować, gdzie jest zainstalowany na twoim komputerze i włączyć go.
Dowiedz się, gdzie jest zainstalowany Git
/usr/local/opt/git
cd / && pwd -W
aby znaleźć katalog instalacyjny.ll $(which git)
lublocate git
powinieneś pomóc.Połącz
diff-highlight
z katalogiem bin, aby ścieżka PATH mogła go znaleźćGIT_HOME='/usr/local/opt/git/' # Use the value from the first step. ln -s "${GIT_HOME}/share/git-core/contrib/diff-highlight/diff-highlight" \ '/usr/local/bin/diff-highlight'
Włącz to w konfiguracji Git
git config --global interactive.diffFilter diff-highlight # Use on interactive prompts git config --global pager.diff "diff-highlight | less" # Use on git diff git config --global pager.log "diff-highlight | less" # Use on git log git config --global pager.show "diff-highlight | less" # Use on git show
1 Oto wersja 1.7.8 , ale od tamtej pory wprowadzono wiele zmian .
źródło
which git
wymaga, aby znajdował się w PATH w pierwszej kolejności, więc nie zadziała, jeśli nie jest :-)diff-highlight
, w rzeczywistości go nie instaluje , więc krok dowiązania symbolicznego jest rzeczywiście konieczny (przynajmniej w systemie MacOS). Jeśli uznasz, że nie jest to konieczne dla Twojej platformy, ponownie możesz zaktualizować odpowiedź. Tymczasemwhich git
zwykle działa, ponieważ Git robi zainstalowaćgit
binarną gdzieś na drodze..perl
. Kompilacja jest banalna: wystarczy uruchomić jąsudo make
wdiff-highlight
katalogu.Używam
--color-words
opcji i u mnie działa dobrze:źródło
jak mówi @dshepherd :
Ale
diff-highlight
znajduje się w DOC i nie jest dostępny z powłoki.Aby zainstalować
diff-highlight
w swoim~/bin
katalogu, wykonaj następujące kroki (pozwoli to zaoszczędzić wpisywanie):Następnie skonfiguruj swój
.gitconfig
zgodnie z oficjalnym dokumentem:UPD
Możesz także wypróbować następny najnowszy
git
bez żadnej instalacji:Bardziej złożony:
źródło
Emacs posiada funkcję ediff-patch-buffer, która powinna spełnić Twoje potrzeby.
Otwórz nienaprawiony plik w emacsie typu ESC-x, ediff-patch-buffer.
Postępuj zgodnie z wyświetlanymi instrukcjami, a powinieneś zobaczyć podświetlone porównanie poprawionej i oryginalnej wersji pliku.
Zgodnie z Twoim komentarzem, poniżej znajdziesz rozwiązanie bash wymagające tylko dwdiff:
źródło
colordiff -u <(patch original_file -i patch_file -o -) <(cat original_file)
ale to będzie tylko podkreślić linie zmieniły nie gryzie ...dwdiff -c --diff-input diff_file
Diffy
GitLab używa Diffy https://github.com/samg/diffy (Ruby), aby uzyskać wyniki podobne do GitHub i diff-highlight:
Diffy sam tworzy różnicę, używając tego samego algorytmu, co Git i obsługuje różne typy danych wyjściowych, w tym dane wyjściowe HTML używane przez GitLab:
Wynik:
Zwróć uwagę, jak
strong
zostało dodane do zmienionych bajtów.źródło
Tak, Vim robi to łącznie z podświetlaniem tekstu zmienionego w linii.
Zobacz
:h diff
i:h 08.7
po więcej szczegółów na temat porównywania plików.Vim używa dość prostego algorytmu do podświetlania. Przeszukuje wiersz pod kątem pierwszego zmienionego znaku, a następnie ostatniego zmienionego znaku i po prostu podświetla wszystkie znaki między nimi.
Oznacza to, że nie możesz mieć wielu wyróżnień na linię - wiele decyzji projektowych w Vimie nadaje priorytet wydajności.
źródło
vimdiff file1 file2
wyświetli różnicę znakową między dwoma plikami.vimdiff jest narzędziem porównywania zawartym w vimie. (Vim powinien być skompilowany z opcją + diff, aby mieć pewność, że możesz to sprawdzić
:version
)Możesz również uruchomić go z wnętrza vima. Zobacz,
:help diff
aby uzyskać więcej informacji i poleceń.źródło
vimdiff file.old file.new -c 'FormatCommand diffformat' -c 'w! file.diff.html' -c 'qa!'
.screen -D -m
dołączenie z wyprzedzeniem lub dopisanie&>/dev/null
(wariant / dev / null czasami powoduje dziwne błędy), jeśli nie chcesz widzieć flashowania terminala) i wyjdzie z vima po zakończeniu formatowania, ale jest to czysty vimscript i nawet z moimi optymalizacjami jest bardzo powolny dla dużych plików.Uwaga : to jest duplikat tego, co znajduje się tutaj: Jak poprawić podświetlanie różnic w git? . Jednak zamieszczam tutaj również moją odpowiedź, ponieważ może to być pomocne dla niektórych osób, które bezpośrednio znajdą ten wątek :)
Jak powiedziano w niektórych poprzednich odpowiedziach, jest to możliwe tylko w przypadku rzeczy git. Publikuję to, ponieważ instrukcje mogą być nieco łatwiejsze do wykonania w zależności od twojego systemu, ale jest to podobne do kilku innych odpowiedzi.
Jedno rozwiązanie, które opiera się wyłącznie na git i jego wkładach. Nie wymaga to dodatkowych plików niż te, które są dostarczane z git . Wszystkie wyjaśnienia dotyczą Ubuntu (testowane na 18.04LTS), powinny działać podobnie na innych systemach linuxowych:
w moim systemie jedyną poprawną odpowiedzią jest:
~/.gitconfig
aby uzyskać pożądany wynik, dodając (pamiętaj, że są to TABS, a nie 4 spacje):źródło