881 Stimmen

Wie kann ich verhindern, dass "git diff" einen Pager verwendet?

Gibt es einen Befehlszeilenschalter, der an git diff und andere Befehle, die die less Pager standardmäßig? Ich weiß, dass es diese Methoden gibt:

  • git diff | cat ... entfernt die gesamte Syntaxhervorhebung
  • git config --global core.pager cat setzt den Pager in der globalen .gitconfig auf cat
  • export GIT_PAGER=cat

Aber ich würde einen Befehlszeilenschalter vorziehen.

985voto

Ignacio Vazquez-Abrams Punkte 735200

--no-pager zu Git sagt ihm, dass es keinen Pager verwenden soll. Die Übergabe der Option -F a less gibt an, dass die Ausgabe nicht ausgelagert werden soll, wenn sie auf einen einzigen Bildschirm passt.

Verwendung:

git --no-pager diff

Weitere Optionen aus den Kommentaren sind:

# Set an evaporating environment variable to use 'cat' for your pager
GIT_PAGER=cat git diff

# Tells 'less' not to paginate if less than a page
export LESS="-F -X $LESS"
# ...then Git as usual
git diff

375voto

ishaaq Punkte 5825

Wie bereits in einer früheren Antwort erwähnt, ist die Übergabe der -F Option zu less führt dazu, dass es beendet wird, wenn der Inhalt weniger als ein Bildschirm beträgt. Danach wird der Bildschirm jedoch zurückgesetzt, und Sie sehen den Inhalt nicht mehr.

El -X Option wird dieses Verhalten abgeschafft. Ich verwende also Folgendes, um das bedingte Paging auf der Grundlage der Menge des Inhalts zu aktivieren:

git config --global --replace-all core.pager "less -F -X"

236voto

geekQ Punkte 28189

Verwenden Sie

git config --global core.pager cat

um einen Pager für alle Befehle für alle Repositories loszuwerden.

Sie können auch das Paging für einzelne Git-Unterbefehle deaktivieren, indem Sie pager.<cmd> Einstellung anstelle von core.pager und Sie können Ihre Einstellungen pro Git-Repository ändern (lassen Sie --global ).

Ver man git-config und suchen Sie nach pager.<cmd> für Einzelheiten.

94voto

mmtauqir Punkte 7239

Sie können Pager für bestimmte Ausgänge auch in der globalen Konfiguration deaktivieren/aktivieren:

git config --global pager.diff false

Oder um die Option core.pager zu setzen, geben Sie einfach eine leere Zeichenkette an:

git config --global core.pager ''

Dies ist meiner Meinung nach besser als die Einstellung auf cat wie Sie sagen.

79voto

VonC Punkte 1117238

Die jüngsten Änderungen in der Dokumentation erwähnen eine andere Möglichkeit, eine Standardoption für less ("Standardoptionen" sind FRSX ).

Für diese Frage würde dies bedeuten (git 1.8+)

git config --global --replace-all core.pager 'less -+F -+X'

Zum Beispiel, Dirk Bester schlägt vor in den Kommentaren :

export LESS="$LESS -FRXK" 

so dass ich ein farbiges Diff mit Ctrl-C kündigen von less .

Wilson F Erwähnt in den Kommentaren und in seine Frage das:

less unterstützt den horizontalen Bildlauf, d.h. wenn Zeilen abgeschnitten werden, deaktiviert less quit-if-one-screen, so dass der Benutzer den Text noch nach links scrollen kann, um zu sehen, was abgeschnitten wurde.


Diese Änderungen waren bereits in git 1.8.x sichtbar, wie in " Verwenden Sie den Pager immer für git diff " (siehe die Kommentare). Aber die Dokumentation wurde gerade umformuliert ( für Git 1.8.5 oder 1.9, Q4 2013 ).

Textbetrachter zur Verwendung durch Git-Befehle (z.B. 'less').
Der Wert ist für die Interpretation durch die Shell bestimmt.

Die Reihenfolge ist wie folgt:

  • die $GIT_PAGER Umgebungsvariable,
  • dann core.pager Konfiguration,
  • dann $PAGER ,
  • und dann die zur Kompilierzeit gewählte Voreinstellung (normalerweise 'less').

Wenn die LESS Umgebungsvariable nicht gesetzt ist, setzt Git sie auf FRSX
(wenn LESS Umgebungsvariable gesetzt ist, ändert Git sie überhaupt nicht).

Wenn Sie selektiv die Standardeinstellung von Git für LESS können Sie einstellen core.pager zu z.B. less -+S .
Dies wird von Git an die Shell weitergegeben, die den endgültigen Befehl in LESS=FRSX less -+S . Die Umgebung teilt dem Befehl mit, dass er die S Option, um lange Zeilen zu kürzen, aber die Befehlszeile setzt sie auf die Standardeinstellung zum Falten langer Zeilen zurück.


Ver Übergabe 97d01f2a für den Grund der neuen Formulierung der Dokumentation:

Konfig: umschreiben core.pager Dokumentation

Im Text heißt es core.pager y GIT_PAGER ohne ein Gesamtbild des Vorrangs zu vermitteln. Eine bessere Beschreibung findet sich in der git var (1) Dokumentation.

Die Verwendung des Mechanismus, der systemweite, globale und repositoryspezifische Konfigurationsdateien ermöglicht, ist nicht auf diese spezielle Variable beschränkt. Entfernen Sie sie, um den Absatz zu verdeutlichen.

Schreiben Sie den Teil um, der erklärt, wie die Umgebungsvariable LESS auf den Standardwert von Git gesetzt ist, und wie man ihn selektiv anpassen kann.


Nota: Übergabe b327583 ( Matthieu Moy moy , April 2014, für git 2.0.x/2.1, Q3 2014) wird das S standardmäßig entfernt:

pager: standardmäßig 'S' aus $LESS entfernen

Standardmäßig hat Git die $LESS a -FRSX wenn $LESS wurde vom Benutzer nicht gesetzt.
Die FRX Flaggen sind für Git tatsächlich sinnvoll ( F y X denn manchmal ist der Ausgang Git Pipes to less kurz, und R weil Git farbige Ausgaben leitet).
Die S Flag (chop long lines) hat dagegen nichts mit Git zu tun und ist eine Frage der Benutzerpräferenz. Git sollte dem Benutzer nicht die Entscheidung überlassen, die LESS Der Standard .

Genauer gesagt, die S Flagge schadet Benutzern, die nicht vertrauenswürdigen Code innerhalb eines Pagers überprüfen, da ein Patch, der so aussieht:

-old code;
+new good code; [... lots of tabs ...] malicious code;

identisch erscheinen würde:

-old code;
+new good code;

Benutzer, die das alte Verhalten bevorzugen, können die Umgebungsvariable $LESS weiterhin auf -FRSX explizit, oder setzen Sie core.pager auf ' less -S '.

Die Dokumentation wird lauten:

Die Umgebung setzt nicht die S Option, aber die Befehlszeile tut es und weist less an, lange Zeilen abzuschneiden.
Ähnlich verhält es sich mit der Einstellung core.pager a less -+F deaktiviert die F Option, die von der Umgebung in der Befehlszeile angegeben wurde, die Deaktivierung der " quit if one screen " Verhalten von less .
Man kann einige Flags gezielt für bestimmte Befehle aktivieren: zum Beispiel, indem man pager.blame a less -S ermöglicht das Abschneiden von Zeilen nur für git blame .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X