Nie można uzyskać czytelnych dla człowieka numerów wierszy za pomocą git diff
Obecnie nie ma żadnych opcji wyświetlania numerów linii pionowo z boku git diff
.
Format Unified-diff
Te informacje są jednak dostępne w (c) nagłówkach porcji dla każdej zmiany w różnicach, ale są one tylko w formacie unified-diff :
@@ -start,count +start,count @@
Oryginalny stan pliku jest reprezentowany za pomocą -
, a nowy stan jest reprezentowany przez +
(nie oznaczają one dodania i usunięcia w nagłówku porcji. start
Reprezentuje numer linii początkowej każdej wersji pliku i count
reprezentuje liczbę zawartych linii począwszy od punktu początkowego.
Przykład
diff --git a/osx/.gitconfig b/osx/.gitconfig
index 4fd8f04..fcd220c 100644
--- a/osx/.gitconfig
+++ b/osx/.gitconfig
@@ -11,7 +11,7 @@ <== HERE!
[color "branch"]
upstream = cyan
[color "diff"]
- meta = yellow
+ meta = cyan
plain = white dim
old = red bold
new = green bold
Nagłówek przystojniaka
@@ -11,7 +11,7 @@
mówi, że poprzednia wersja pliku zaczyna się w linii 11 i zawiera 7 linii:
11 [color "branch"]
12 upstream = cyan
13 [color "diff"]
14 - meta = yellow
14 + meta = cyan
15 plain = white dim
16 old = red bold
17 new = green bold
podczas gdy następna wersja pliku również zaczyna się w linii 11 i zawiera również 7 linii.
Format Unified-diff nie jest przeznaczony do spożycia przez ludzi
Jak zapewne możesz stwierdzić, format unified-diff nie ułatwia obliczania numerów linii (przynajmniej jeśli nie jesteś maszyną). Jeśli naprawdę chcesz odczytać numery wierszy, musisz użyć narzędzia do porównywania, które wyświetli je za Ciebie.
Dodatkowe czytanie
git diff --unified=0 | grep -Po '^\+\+\+ ./\K.*|^@@ -[0-9]+(,[0-9]+)? \+\K[0-9]+(,[0-9]+)?(?= @@)'
--unified=0
lub-U0
.git diffn
, zastępstwo (opakowanie),git diff
które pokazuje numery linii i ma pełną kompatybilność ze wszystkimi zastosowaniami i opcjamigit diff
: stackoverflow.com/questions/24455377/ ...Oto dwa kolejne rozwiązania, rozwijające kod Andy'ego Talkowskiego.
Zwykły tekst:
Kolorowy tekst przy założeniu
\033[66m
formatu kodów kolorów:Kod zmienia wiersze zaczynające się odpowiednio od
-
i+
do-1:-
i+1:+
oraz wiersze zaczynające się niczymdo
(5,6):
. Liczby to numery wierszy z odpowiedniego pliku.źródło
git diff
starannie zachowuje wyrównanie. W tej chwili mam nad głową ten kod, więc czy zechciałbyś go naprawić? Innymi słowy, gdy w jednej linii jest napisane,+240:+
a w następnej(241,257):
, musisz dodać dodatkowe spacje do górnej linii, aby kod zachował właściwe wyrównanie i wcięcia z kodem z dolnej linii. Może można to łatwo zrobić za pomocą druku?printf
.git diffn
. Zobacz tutaj: stackoverflow.com/a/61997003/4561887 . Dzięki @PFudd za odpowiedź. Przestudiowałem go i użyłem do nauki, a potem zacząłem od zera i pisałemgit diffn
. Po sformatowaniu, aby móc odczytać Twój kod (dzięki @EdMorton), mogłem nauczyć się z niego wielu wspaniałych rzeczy, które mi pomogły.Oto skrypt, który próbuje to naprawić - nie testowałem go w gniewie, ale wydaje się w porządku. Opiera się na rekordach tworzonych przez git diff i używa awk do utrzymywania liczby linii.
źródło
Możesz użyć
git difftool
do zrobienia porównania za pomocą zewnętrznego edytora, który wyświetli numery linii. Oto jak to zrobić z vim / vimdiff:Ustaw vimdiff jako difftool gita:
Skonfiguruj
~/.vimrc
automatyczne wyświetlanie numerów linii podczas korzystania z vimdiff:Uruchom git difftool, który użyje vimdiff z numerami linii:
źródło
Szybkim sposobem jest użycie
git diff -U0
. Spowoduje to ustawienie linii kontekstu na 0, co spowoduje, że wartości @@ będą pasować do faktycznie zmienionych linii. Domyślnie wartości @@ obejmują 3 wiersze kontekstu przed / po, co nie jest wygodne dla ludzi.Przykład:
Trudno jest obliczyć numery wierszy zmienionych wierszy, ponieważ wiersz 10 odnosi się do pierwszego wiersza poprzedniego kontekstu. Rzeczywisty numer linii pierwszej zmienionej linii to 10 + 3 = 13. Aby obliczyć liczbę zmienionych linii, musisz również odjąć kontekst przed i po: 8-3-3 = 2.
Jak widać, ustawienie context = 0 sprawia, że wartości @@ są łatwiejsze do odczytania dla ludzi. Możesz zobaczyć, że zmienione linie zaczynają się w linii 13 i są 2 zmienione linie.
To nie jest idealne, ponieważ pokazuje tylko numer linii dla każdego bloku. Jeśli chcesz zobaczyć numery linii dla każdej linii, użyj difftool dla zewnętrznego edytora. Zobacz https://stackoverflow.com/a/50049752
źródło
Lubię używać
git difftool
z meldem jako moim difftool. Łatwiej jest na niego spojrzećgit diff
, ma ładne porównanie GUI obok siebie i pokazuje numery linii po każdej stronie.Ustawiać:
Przykładowy zrzut ekranu:
Aktualizacja z 24 maja 2020 r .:
Właśnie napisałem w
git diffn
ciągu ostatnich kilku dni, aby zastąpićgit diff
go w wierszu poleceń. Spróbuj. Zobacz moją drugą odpowiedź tutaj .źródło
Od 24 maja 2020 r. Możesz teraz używać w
git diffn
tym celu narzędzia innej firmy (pełne ujawnienie: napisałem). Jest to lekkie opakowaniegit diff
, napisane wawk
języku programowania opartym na wzorcach / akcjach. Oto przykładowe dane wyjściowe z uruchomieniagit diffn
:Oto demo:
1/3: Demo
git diffn
:Utwórz ten plik:
hello_world.c:
Zatwierdź to:
Zmień to na to i zapisz plik:
hello_world.c:
Teraz biegnij:
Oto wynik działania
git diff
pierwszego dla celów porównawczych:I zrzut ekranu pokazujący kolor. Zwróć uwagę, że sekcja podświetlona na czerwono pokazuje po prostu puste spacje (w tym przypadku spacje), które można usunąć:
Oto wynik działania
git diffn
. Zauważ, że pokazuje doskonale wszystkie numery linii!-
znak zarówno po lewej, jak i po prawej stronie,:
aby pomóc ci lepiej widzieć - niezależnie od tego, czy twoje oczy lubią skanować w dół na prawo od okrężnicy, czy w dół po drugiej stronie po lewej stronie ekranu.+
znak zarówno po lewej, jak i po prawej stronie:
.,
.Wyjście
git diffn
:I zrzut ekranu pokazujący kolor. Zwróć uwagę, że dwukropki NIE są kolorowane ani stylizowane tak, aby pasowały do otaczającego tekstu po lewej i prawej stronie. Jest to celowe i zaprojektowane zachowanie działające jako wizualny separator między numerami linii dodanymi po lewej stronie a oryginalnym
git diff
wyjściem po prawej stronie.2/3: Co to jest?
Od góry
git-diffn.sh
:OPIS:
git-diffn.sh
zamiennik typu drop-in, dla
git diff
którego jest również wyświetlany numer linii! Używaj go dokładnie takgit diff
, jak , z tą różnicą, że zobaczysz również te piękne numery wierszy, które pomogą Ci zrozumieć wprowadzone zmiany.ponieważ jest to tylko lekkie opakowanie oparte na języku awk
git diff
, przyjmuje WSZYSTKIE akceptowane opcje i parametrygit diff
. Przykłady:git diffn HEAD~
git diffn HEAD~3..HEAD~2
działa z dowolnymi
git diff
ustawieniami kolorów, nawet jeśli używasz kolorów niestandardowychZobacz moją odpowiedź tutaj, aby dowiedzieć się, jak ustawić niestandardowe kolory różnic, a także zobaczyć zrzut ekranu wyjściowego koloru niestandardowego z
git diffn
: Jak dostosować kolor nagłówka diff w git diff?Oto kilka przykładowych
git config
poleceń z mojej odpowiedzi powyżej, aby ustawić niestandardowegit diff
kolory i atrybuty (formatowanie tekstu):in
git diffn
, wyjście kolorowe jest domyślnie WŁĄCZONE; jeśli chcesz wyłączyć kolor wyjściowy, musisz użyć--no-color
lub--color=never
. Zobaczman git diff
szczegóły. Przykłady:3/3: Instalacja
gawk
. Jeśli tak, spróbuj tego :brew install gawk
.Opcja 1 (moja rekomendacja): pobierz całe repozytorium, a następnie utwórz link symboliczny do programu, abyś mógł łatwo otrzymywać aktualizacje, wykonując
git pull
repozytorium w dowolnym momencie.Po pierwsze,
cd
gdziekolwiek chcesz to zainstalować. Następnie uruchomić:Gotowe! Teraz wykonaj ostatni krok poniżej!
Opcja 2 (dla tych, którzy chcą tylko jednego pliku): pobierz tylko jeden plik jeden raz.
Gotowe! Teraz wykonaj ostatni krok poniżej!
Ostatni krok:
Teraz zamknij i ponownie otwórz swój terminal lub przeprowadź go ponownie za pomocą
. ~/.bashrc
i gotowe!git diffn
będzie teraz działać jako dokładny zamiennikgit diff
!źródło
Możesz spróbować
w pliku. Pokazuje ci committer, identyfikator zatwierdzenia i numer linii dla każdej linii w pliku.
źródło
git blame
pokaże tylko aktualny stan pliku z numerami linii.git blame
w żaden sposób nie odpowiada na pytanie; Jestem dość zdumiony głosami uprzywilejowanymi tutajNajpierw skonfiguruj narzędzie do porównywania git, np. Meld
Następnie wyciągnij difftool na jakiś plik:
Zapamiętaj ustawienie numeru linii w preferencjach narzędzia porównywania.
źródło