Wie soll ich Git Diff für lange Schlangen verwenden?

235

Ich führe git-diff für eine Datei aus, aber die Änderung steht am Ende einer langen Zeile.

Wenn ich mich mit den Cursortasten nach rechts bewege, verliert die Farbcodierung - und schlimmer noch, die Linien richten sich nicht aus -, was es schwieriger macht, die Änderung zu verfolgen.

Gibt es eine Möglichkeit, dieses Problem zu vermeiden oder stattdessen einfach die Zeilen umbrechen zu lassen?

Ich verwende Git 1.5.5 über mingw32.

Peter Boughton
quelle
6
Vielleicht möchten Sie 'git diff --color-words' ausprobieren, es löst das Bildlaufproblem nicht, aber Wortänderungen sind in einer einzelnen Zeile vom Kontext umgeben!
Kevinf
7
Die Verwendung von "Fold" scheint ziemlich gut zu funktionieren:git diff --color-words | fold
Amy
@ Amy Ich habe versucht, foldaber es entfernt Farbe. Da Sie angeben, gehe --color-wordsich davon aus, dass Sie es geschafft haben, Farben an zu übergeben fold. Wie?
Nero Gris

Antworten:

120

Die Anzeige der Ausgabe von git diffwird von jedem Pager ausgeführt, den Sie verwenden.

Üblicherweise wird unter Linux lessverwendet.

Sie können git anweisen, einen anderen Pager zu verwenden, indem Sie die GIT_PAGERUmgebungsvariable festlegen. Wenn Ihnen das Paging nichts ausmacht (z. B. können Sie mit Ihrem Terminal einen Bildlauf durchführen), können Sie explizit festlegen GIT_PAGER, dass es leer ist, um es mit einem Pager zu stoppen. Unter Linux:

$ GIT_PAGER='' git diff

Ohne Pager werden die Zeilen umbrochen.

Wenn Ihr Terminal keine farbige Ausgabe unterstützt, können Sie dies auch deaktivieren, indem Sie entweder das --no-colorArgument verwenden oder einen Eintrag in den Farbbereich Ihrer Git-Konfigurationsdatei einfügen.

$ GIT_PAGER='' git diff --no-color
SpoonMeiser
quelle
1
Ich kann bestätigen, dass das Setzen von GIT_PAGER auf leer dazu führt, dass die Zeilen umbrochen werden. Es werden auch Symbole eingefügt, die das Lesen etwas erschweren, aber bei Bedarf kann ich einen anderen Pager finden, also immer noch eine gültige Antwort. :) Vielen Dank.
Peter Boughton
1
Welche Symbole werden hinzugefügt, die das Lesen erschweren? Möglicherweise kann ich meine Antwort bearbeiten, um auch dieses Problem zu lösen.
SpoonMeiser
Meistens "<- [m" für jede neue Zeile (wobei <- ein einzelnes Pfeilzeichen war), aber auch Markierungen, bei denen (glaube ich) jede Farbe begonnen hätte, wie "<- [1m" und "<- [32m".
Peter Boughton
1
Hilft das Argument --no-color überhaupt? Ich bin mir bei den Zeilenumbrüchen nicht sicher.
SpoonMeiser
Ja, danke, das verhindert, dass alle unerwünschten Inhalte angezeigt werden. Die Zeilenumbrüche müssen also auch farbbezogen sein.
Peter Boughton
229

Oder wenn Sie weniger als Standard-Pager verwenden, geben Sie einfach ein, -Swährend Sie das Diff anzeigen, um das Wrapping in weniger wieder zu aktivieren.

jemand45
quelle
60
verwandter Tipp, verwenden Sie --word-diff, um eine farbcodierte Hervorhebung geänderter Wörter zu sehen
Josh Diehl
5
Nur eine Anmerkung dafür, da ich sah, dass einige Leute Probleme damit hatten. -S unterscheidet sich von -s (stellen Sie sicher, dass Sie Schicht + s
treffen
2
@JoshDiehl: Ich hoffe, es macht Ihnen nichts aus ... Ich denke, der --word-diffTeil verdient es, eine eigene Antwort darauf zu haben, da ich viel zur Lösung des zugrunde liegenden Problems beitragen muss: herauszufinden, was sich in einer langen Reihe geändert hat. Also habe ich es geschafft: stackoverflow.com/a/19253759/313756
Lindes
1
Hinweis: Dies scheint unter OS X (Außenseiter) nicht zu funktionieren.
DilithiumMatrix
@zhermes Es funktioniert für mich in Mavericks mit weniger 418. Stellen Sie sicher, dass Sie -Smit einem Großbuchstaben S tippen , nicht -s. Less zeigt unten nach der Eingabe die Meldung "Lange Zeilen falten (RETURN drücken)" an. Wenn Sie -Sdann die Eingabetaste drücken, wird das Umbrechen aktiviert.
Rory O'Kane
115

Sie können den git configPager auch zum Umbrechen einrichten.

$ git config core.pager 'less -r' 

Legt die Pager-Einstellung für das aktuelle Projekt fest.

$ git config --global core.pager 'less -r' 

Legt den Pager global für alle Projekte fest

Shoan
quelle
3
mit msysgit (1.8.1.msysgit.1) funktionierte es bei mir mit doppelten Anführungszeichen -git config --global core.pager "less -r"
kerim
Dies brachte mich dazu, permanent mit Git Diff unter OS X zu arbeiten. Danke!
Thomson Comer
Es funktioniert, aber ich verstehe nicht warum. Kann jemand erklären? man less, -rSagt nichts über die Verpackung.
Ciro Santilli 法轮功 冠状 病 六四 事件 5
@ThomsonComer '-r' bezieht sich auf das Anzeigen von Steuerzeichen in OS X ... Wie haben Sie das zum Laufen gebracht?
DilithiumMatrix
Ich kann mich jetzt nicht sicher erinnern. Aber einige Links gefunden , dass es mehr erklären: michael.otacoo.com/linux-2/avoid-escape-characters-in-git superuser.com/questions/366930/... unix.stackexchange.com/questions/19317/...
Shoan
49

Mit der vollen Anerkennung von Josh Diehl in einem Kommentar zu dieser Antwort denke ich dennoch, dass dies eine Antwort für sich selbst sein sollte, also füge es hinzu:

Eine Möglichkeit, mit Unterschieden in langen Zeilen umzugehen, ist die Verwendung eines wortorientierten Diff. Dies kann erfolgen mit:

git diff --word-diff

In diesem Fall erhalten Sie eine deutlich andere Diff-Ausgabe, die Ihnen genau zeigt, was sich innerhalb einer Zeile geändert hat.

Zum Beispiel, anstatt so etwas zu bekommen:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
-this is a short line
+this is a slightly longer line

Sie könnten so etwas bekommen:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
this is a [-short-]{+slightly longer+} line

Oder stattdessen mit Kolorierung:

Ergebnis von nur <code> git diff </ code>

Sie könnten dies bekommen:

Ergebnis von <code> git diff --word-diff </ code>

Wenn Sie nun eine wirklich lange Warteschlange vergleichen, haben Sie möglicherweise immer noch Probleme mit der Pager-Situation, die Sie ursprünglich beschrieben haben und die anscheinend in anderen Antworten zur Zufriedenheit angesprochen wurde. Hoffentlich erhalten Sie dadurch ein neues Tool, mit dem Sie leichter erkennen können, was sich in der Zeile geändert hat.

Lindes
quelle
6
Es gibt ein paar Optionen für --word-diff: color, plain, und porcelain. Außerdem kann man den regulären Ausdruck für Wortgrenzen mit ändern --word-diff-regex. Der Standardwert scheint zu sein \S+. ( v2.1.1 )
Michael - Wo ist Clay Shirky
3
--color-wordsscheint eine Abkürzung zu sein --word-diff=color, was schön ist, wenn Sie nur das Diff betrachten und es nicht teilen.
CivFan
Ah, das ist interessant und möglicherweise sehr nützlich. Danke für das Teilen!
Darragh Enright
1
Ich mag es --word-diff=porcelainbesser, als --word-diffweil porcelaindie Änderungen in separaten Zeilen angeordnet werden, während --word-diffdie Änderungen inline gestellt werden. Durch separate Linien können Sie die Unterschiede leichter erkennen, wenn die Unterschiede subtil sind.
wisbucky
1
Lebensverändernd für LaTeX-Dateien!
6005
30

Um weniger als Pager zu verwenden und den Zeilenumbruch dauerhaft zu machen, können Sie einfach die Option zum Falten langer Zeilen aktivieren:

git config --global core.pager 'less -+S'

Auf diese Weise müssen Sie es nicht eingeben, während Sie weniger verwenden.

Prost

Daniel Montezano
quelle
Arbeitete für mich unter OS X 10.9.5. Vielen Dank!
Jay Taylor
Wenn Sie den Zeilenumbruch beim Lesen von Git-Diffs deaktivieren möchten, ist die Einstellung ähnlich:git config --global core.pager 'less -S
Topher Hunt
19

Ich habe gerade diesen gegoogelt. GIT_PAGER='less -r'funktioniert bei mir

singender Fisch
quelle
9
Noch besser (für mich): less -R(Eigentlich benutze ich less -eiFRSX, was auch Farb- und Zeilenumbruchprobleme löst.)
cdunn2001
2
Weniger -R ist wie -r, aber nur ANSI-Escape-Sequenzen "Farbe" werden in "Roh" -Form ausgegeben. Im Gegensatz zu -r wird das Erscheinungsbild des Bildschirms in den meisten Fällen korrekt beibehalten. (Mann weniger)
Richk
19

Mac OSX: Keine der anderen Antworten außer jemandes '-S', während weniger läuft, hat für mich funktioniert. Es dauerte Folgendes, um den Zeilenumbruch dauerhaft zu machen:

git config --global core.pager 'less -+$LESS -FRX'
John Lemberger
quelle
Das hat auch bei mir funktioniert, aber ich verstehe nicht warum. Was macht der -+$LESSParameter? Sofern git es nicht definiert, ist meine Umgebungsvariable LESS nicht einmal festgelegt.
Jakar
3
@jakar: dann macht es nichts. In einigen Umgebungen $LESSwird ein bestimmter Wert festgelegt (z. B. durch ein .loginoder ein .profileoder etwas), und diese Option fügt meiner Meinung nach nur die Standardeinstellungen hinzu und fügt diese dann hinzu -FRX.
naught101
Dies hat bei OS X Mavericks nicht funktioniert, $LESSist undefiniert.
DilithiumMatrix
naught101 ist richtig, dass + - $ LESS einfach alle Einstellungen in .login oder .profile (falls vorhanden) enthält. Bei Mavericks funktioniert es gut, aber Sie können es weglassen, wenn es Probleme verursacht.
John Lemberger
5

Wenn Sie "git diff" verwenden und mehrere Seiten angezeigt werden (Sie sehen ":" am Ende der Seite), können Sie in diesem Fall "-S" eingeben und die Eingabetaste drücken (S sollte Großbuchstaben sein). es wird das Falten langer Linien umschalten.

Amin
quelle
Dies ist viel einfacher, als sich mit irgendwelchen Einstellungen
herumschlagen zu müssen
4

Bisher hat niemand darauf hingewiesen. Es ist recht einfach zu merken und es muss keine zusätzliche Konfiguration in der Git-Konfiguration vorgenommen werden

git diff --color | less -R
infoclogged
quelle
Mit Abstand die einfachste aller Antworten auf dieser Seite. Meine Umgebung - Oracle Linux 7.6. git diff --color | less -FRfür kleine Änderungen, wenn Sie nicht scrollen müssen
Rakesh N
3

Sie können die Ausgabe von git diff einfach auf mehr leiten:

git diff | more
AnonTidbits
quelle
3

Keine perfekte Lösung, aber gitkund git-guidiese Informationen sowohl zeigen, und Scrollbalken haben.

Peter Boughton
quelle
1

Listen Sie die aktuelle / Standardkonfiguration auf:

  $ git config --global core.pager  
    less -FXRS -x2

dann aktualisieren und lassen Sie die -S wie:

  $ git config --global core.pager 'less -FXR -x2'

the -S: Bewirkt, dass Linien, die länger als die Bildschirmbreite sind, eher geschnitten als gefaltet werden.

user5870226
quelle
-1

Wenn ich in Schwierigkeiten bin, greife ich oft auf DiffMerge zurück. Hervorragendes Diff-Tool mit Inline-Diff-Hervorhebung. Außerdem haben sie in den neuesten Versionen einen Modus hinzugefügt, um einen horizontalen Modus zu haben.

Ich konnte git jedoch nicht für die Verwendung konfigurieren. Also muss ich mich umsehen, um zuerst beide Versionen der Datei zu bekommen.

Webmat
quelle