Sie können keine für Menschen lesbaren Zeilennummern erhalten git diff
Derzeit gibt es keine Optionen, um Zeilennummern vertikal nebeneinander anzuzeigen git diff
.
Unified-Diff-Format
Diese Informationen sind in den (c) Hunk-Headern für jede Änderung im Diff verfügbar, sie sind jedoch nur im Unified-Diff-Format :
@@ -start,count +start,count @@
Der ursprüngliche Status der Datei wird mit -
und der neue Status mit dargestellt +
(dies bedeutet nicht, dass der Hunk-Header hinzugefügt und gelöscht wird. Stellt start
die Startzeilennummer jeder Version der Datei dar und gibt an count
, wie viele Zeilen enthalten sind ab dem Startpunkt.
Beispiel
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
Der Hunk-Header
@@ -11,7 +11,7 @@
sagt, dass die vorherige Version der Datei in Zeile 11 beginnt und 7 Zeilen enthält:
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
Die nächste Version der Datei beginnt ebenfalls in Zeile 11 und enthält ebenfalls 7 Zeilen.
Das Unified-Diff-Format ist nicht wirklich für den menschlichen Verzehr bestimmt
Wie Sie wahrscheinlich sehen können, macht es das Unified-Diff-Format nicht einfach, Zeilennummern herauszufinden (zumindest, wenn Sie keine Maschine sind). Wenn Sie wirklich Zeilennummern möchten, die Sie lesen können, müssen Sie ein unterschiedliches Werkzeug verwenden, das sie für Sie anzeigt.
Zusätzliche Lektüre
git diff --unified=0 | grep -Po '^\+\+\+ ./\K.*|^@@ -[0-9]+(,[0-9]+)? \+\K[0-9]+(,[0-9]+)?(?= @@)'
--unified=0
oder angeben-U0
.git diffn
, ein Drop-In-Ersatz (Wrapper), fürgit diff
den Zeilennummern angezeigt werden und der mit allen Verwendungsmöglichkeiten und Optionen kompatibel istgit diff
: stackoverflow.com/questions/24455377/…Hier sind zwei weitere Lösungen, die den Code von Andy Talkowski erweitern.
Klartext:
Farbiger Text, vorausgesetzt
\033[66m
das Format für Farbcodes:Der Code ändert Zeilen , die mit Start
-
und+
auf-1:-
und+1:+
sind, und Zeilen , die mit nichts anfangenzu
(5,6):
. Die Nummern sind die Zeilennummern aus der jeweiligen Datei.quelle
git diff
die Ausrichtung sorgfältig beibehält. Dieser Code ist momentan über meinem Kopf. Wären Sie also bereit, ihn zu beheben? Mit anderen Worten, wenn in einer Zeile+240:+
und in der nächsten Zeile steht(241,257):
, müssen Sie der oberen Zeile einige zusätzliche Leerzeichen hinzufügen, damit der Code die richtige Ausrichtung und Einrückung mit dem Code aus der unteren Zeile beibehält. Vielleicht könnte dies leicht mit Druck gemacht werden?printf
.git diffn
. Siehe hier: stackoverflow.com/a/61997003/4561887 . Danke @PFudd, für deine Antwort. Ich habe es studiert und zum Lernen verwendet, dann von vorne angefangen und geschriebengit diffn
. Einmal formatiert, damit ich Ihren Code lesen konnte (danke @EdMorton), konnte ich einige großartige Dinge daraus lernen, die mir geholfen haben.Hier ist ein Skript, das versucht, dies zu beheben - es wurde nicht im Zorn getestet, aber es scheint in Ordnung zu sein. Es basiert auf den Datensätzen, die git diff erstellt, und verwendet awk, um die Zeilenanzahl aufrechtzuerhalten.
quelle
Sie können
git difftool
den Diff mit einem externen Editor ausführen, der Zeilennummern anzeigt. So geht's mit vim / vimdiff:Setze vimdiff als Git's Difftool:
Konfigurieren Sie
~/.vimrc
, dass Zeilennummern bei Verwendung von vimdiff automatisch angezeigt werden:Führen Sie git difftool aus, das vimdiff mit Zeilennummern verwendet:
quelle
Ein schneller Weg ist zu bedienen
git diff -U0
. Dadurch werden die Kontextzeilen auf 0 gesetzt, wodurch die @ @ -Werte mit den tatsächlich geänderten Zeilen übereinstimmen. Standardmäßig enthalten die @@ -Werte 3 Zeilen Vorher / Nachher-Kontext, was für Menschen nicht geeignet ist.Beispiel:
Dies ist schwierig, die Zeilennummern der geänderten Zeilen zu berechnen, da sich Zeile 10 auf die erste Zeile des vorherigen Kontexts bezieht. Die tatsächliche Zeilennummer der ersten geänderten Zeile beträgt 10 + 3 = 13. Um die Anzahl der geänderten Zeilen zu berechnen, müssen Sie auch den Vorher- und Nachher-Kontext subtrahieren: 8-3-3 = 2.
Wie Sie sehen können, erleichtert das Setzen von context = 0 das Lesen der @@ -Werte für Menschen. Sie können sehen, dass die geänderten Zeilen bei Zeile 13 beginnen und es 2 geänderte Zeilen gibt.
Dies ist nicht perfekt, da nur die Zeilennummer für jeden Block angezeigt wird. Wenn Sie Zeilennummern für jede Zeile anzeigen möchten, verwenden Sie difftool für einen externen Editor. Siehe https://stackoverflow.com/a/50049752
quelle
Ich benutze es gerne
git difftool
mit meld als Difftool. Es ist einfacher zu betrachten alsgit diff
, hat einen schönen Side-by-Side-GUI-Vergleich und zeigt Zeilennummern auf jeder Seite.Konfiguration:
Beispiel-Screenshot:
Update 24. Mai 2020:
Ich habe gerade
git diffn
in den letzten Tagen geschrieben, um ein Ersatz fürgit diff
die Kommandozeile zu sein. Versuch es einmal. Siehe meine andere Antwort hier .quelle
Ab dem 24. Mai 2020 können Sie jetzt das Drittanbieter-Tool
git diffn
(vollständige Offenlegung: Ich habe es geschrieben) für diesen Zweck verwenden. Es ist ein leichter Wrappergit diff
, der in derawk
muster- / aktionsbasierten Programmiersprache geschrieben ist. Hier ist eine Beispielausgabe von runninggit diffn
:Hier ist eine Demo:
1/3: Demo von
git diffn
:Erstellen Sie diese Datei:
hello_world.c:
Verpflichte es:
Ändern Sie es in dieses und speichern Sie die Datei:
hello_world.c:
Führen Sie jetzt aus:
Hier ist die Ausgabe von
git diff
first zu Vergleichszwecken:Und ein Screenshot, um die Farbe zu zeigen. Beachten Sie, dass der rot hervorgehobene Bereich lediglich leere Leerzeichen (in diesem Fall Leerzeichen) anzeigt, die gelöscht werden könnten:
Hier ist die Ausgabe von
git diffn
. Beachten Sie, dass alle Zeilennummern perfekt angezeigt werden!-
links und rechts ein Zeichen:
, damit Sie besser sehen können - unabhängig davon, ob Ihre Augen rechts vom Doppelpunkt oder ganz unten scannen möchten links vom Bildschirm.+
Zeichen sowohl ganz links als auch rechts von:
.,
.Ausgabe von
git diffn
:Und ein Screenshot, um die Farbe zu zeigen. Beachten Sie, dass die Doppelpunkte NICHT farbig oder stilisiert sind, um mit dem umgebenden Text links und rechts übereinzustimmen. Dies ist ein beabsichtigtes und entworfenes Verhalten, das als visuelles Trennzeichen zwischen den links hinzugefügten Zeilennummern und der ursprünglichen
git diff
Ausgabe rechts fungiert.2/3: Was ist das?
Von oben
git-diffn.sh
:BESCHREIBUNG:
git-diffn.sh
ein Ersatz, für
git diff
den auch Zeile 'n'Nummern angezeigt werden! Verwenden Sie es genau sogit diff
, außer dass Sie auch diese schönen Zeilennummern sehen, damit Sie Ihre Änderungen besser verstehen.Da es sich nur um einen leichten, auf awk-Sprache basierenden Wrapper handelt
git diff
, werden ALLE Optionen und Parametergit diff
akzeptiert , die akzeptiert werden. Beispiele:git diffn HEAD~
git diffn HEAD~3..HEAD~2
funktioniert mit jeder Ihrer
git diff
Farbeinstellungen, auch wenn Sie benutzerdefinierte Farben verwendenIn meiner Antwort hier erfahren Sie, wie Sie benutzerdefinierte Diff-Farben festlegen und einen Screenshot der Ausgabe von benutzerdefinierten Farben anzeigen von
git diffn
: Wie passen Sie die Farbe des Diff-Headers in Git Diff an?Hier sind einige Beispielbefehle
git config
aus meiner obigen Antwort zum Festlegen benutzerdefiniertergit diff
Farben und Attribute (Textformatierung):in
git diffn
ist die Farbausgabe standardmäßig eingeschaltet; Wenn Sie die Ausgabefarbe deaktivieren möchten, müssen Sie--no-color
oder verwenden--color=never
. Sieheman git diff
für Details. Beispiele:3/3: Installation
gawk
. Wenn ja, versuchen Sie Folgendes :brew install gawk
.Option 1 (meine Empfehlung): Laden Sie das gesamte Repo herunter und erstellen Sie dann einen Symlink zum Programm, damit Sie jederzeit Updates erhalten können, indem Sie eine
git pull
vom Repo ausführen.Erstens,
cd
wohin Sie dies installieren möchten. Dann renne:Getan! Jetzt mach einfach den letzten Schritt unten!
Option 2 (für diejenigen, die nur die 1-Datei möchten): Laden Sie nur die eine Datei einmal herunter.
Getan! Jetzt mach einfach den letzten Schritt unten!
Letzter Schritt:
Schließen Sie nun Ihr Terminal und öffnen Sie es erneut oder geben Sie es erneut ein
. ~/.bashrc
, und Sie sind fertig!git diffn
funktioniert jetzt als exakter Drop-In-Ersatz fürgit diff
!quelle
Du kannst es versuchen
auf der Datei. Es zeigt Ihnen den Committer, die Commit-ID und die Zeilennummer für jede Zeile in der Datei.
quelle
git blame
zeigt nur den aktuellen Status der Datei mit Zeilennummern an.git blame
beantwortet in keiner Weise die Frage; Ich bin ziemlich verblüfft über die positiven Stimmen hierKonfigurieren Sie zuerst Ihr Git Diff-Tool, z. B. Meld
Dann ziehen Sie Ihr Difftool an einer Datei:
Denken Sie daran, die Zeilennummer in den Einstellungen Ihres Diff-Tools festzulegen.
quelle