Warum wird weniger unnötigerweise von git betrieben?

22

Wenn ich git branch(von bash oder csh) laufe, leitet es die Ausgabe automatisch weiter less. Bei nur wenigen Zweigen im Repository ist dies jedoch überflüssig und ärgerlich, da die Liste der Zweige verschwindet, wenn ich weniger beende.

Beim Überprüfen der ~/.gitconfigDatei und der lokalen .git/configDateien wird nichts über einen Pager oder etwas anderes gefunden, das dies verursachen könnte. Ansonsten war nichts, was ich in der Websuche gefunden habe, hilfreich oder vielversprechend.

Warum passiert das und was (wenn überhaupt) kann ich tun, um lessbei Bedarf einen Lauf durchzuführen (z. B. bei einem Lauf, bei dem git loges viel Geschichte gibt), aber nicht anders (wie bei einem git branchmit nur 2 oder 3 Zweigen)?

GreenMatt
quelle
4
Im Allgemeinen weiß git nicht, wie viel Ausgabe von einem Befehl ausgegeben wird, daher wird standardmäßig alles über einen Pager gesendet, was wahrscheinlich weniger sein wird.
Ikarus
6
Das erste, was Sie bei einer neuen -nix-Installation tun können, ist, export LESS=-Xdie .profile. Dies verhindert, dass der Bildschirm "aufgeräumt" wird. Ich hasse es, dass die Standardeinstellung den Bildschirm löscht, weil ich oft Sachen ausschneiden und einfügen oder als Referenz verwenden muss.
Peter - Setzen Sie Monica
3
@Peter Um klar zu sein (kein Wortspiel beabsichtigt), sollten dies nur Personen tun, die das Löschverhalten des Bildschirms nicht möchten.
David Z
@icarus: Das scheint logisch. Mein Verhalten hat sich jedoch in letzter Zeit geändert. Ich bin mir nicht sicher, warum - wahrscheinlich eine Änderung an einer Umgebungsvariablen, die von den Sicherheitsleuten des Unternehmens "in die Höhe getrieben" wurde, denen es egal zu sein scheint, wie schwierig sie die Jobs aller anderen machen. Wie auch immer, Git ging plötzlich von dem, was ich als vernünftig ansah, dazu über, einzeilige Ausgaben so durchzulaufen, dass die Ausgabe verloren ging, wenn ich weniger stoppte.
GreenMatt
Wenn sich das Verhalten kürzlich geändert hat, ist es zumindest möglich, dass den systemweiten Shell-Startdateien eine Einstellung der Variablen LESS hinzugefügt wurde, z. B. /etc/profil, /etc/profile.d/*, /etc/bash.bashrc, Haben Sie diese Variable in Ihrer Umgebung?
Ikarus

Antworten:

35

Sie können Folgendes einstellen:

git config --global core.pager 'less -FRX'

Dies wird sicherstellen, dass lesswird

  • Beenden, wenn die gesamte Datei auf dem ersten Bildschirm angezeigt werden kann ( F)
  • Ausgabe der unformatierten Steuerzeichen für die Terminalformatierung ( R)
  • Lange Schlangen hacken ( S)
  • Sende die Init / De-Init-Zeichenketten nicht an das Terminal - vermeide das Löschen des Bildschirms beim Beenden ( X)

Bearbeiten: Die SOption wurde basierend auf dem Kommentar von Peter A. Scheider entfernt

QIS
quelle
7
und lassen Sie das aus, --globalwenn Sie möchten, dass es nur für das aktuelle Repository gilt.
Mosvy
8
Wenn Sie die Umgebungsvariable LESSauf setzen -FR, können Sie auch X und S nach Belieben hinzufügen.
Ikarus
11
Höchstwahrscheinlich findet das OP dieses Verhalten im Allgemeinen ärgerlich; Ich nehme an, man könnte die Umgebungsvariable setzen export PAGER='less -FRSX'und git würde es berücksichtigen (ohne eine bestimmte git-Konfiguration). Übrigens -Sist gefährlich, weil es die Ausgabe stillschweigend verwirft.
Peter - Setzen Sie Monica
4

Hier gibt es einige gute Antworten für lessdas Verhalten von Tuning , aber da meine grauen Bartfinger es gewohnt sind, zu tippen, |morewenn ich es will, und ich immer noch mehr mit Quecksilber als mit Schwachsinn in Einklang bin, bin ich scharf auf

git config --global core.pager cat
dgc
quelle
3
Die Manpage für git-configgibt an, dass der Wert von core.pagervon der Shell interpretiert werden soll. Wenn Sie es auf setzen no, versucht es, den Befehl auszuführen no, der höchstwahrscheinlich nicht vorhanden ist, und greift dann auf die einfache Ausgabe des Inhalts zurück. Sie werden weiterhin eine Fehlermeldung am Kopf sehen. Was Sie wahrscheinlich tun möchten, ist es catstattdessen zu setzen.
QIS
1
Das ist ein gutes Stück von Informationen, aber was ich mag , ist , dass es nicht ausführen etwas . Das catist nutzlos und ich vertraue Linux-Betreuern nicht besonders an, dass sie nicht ändern, was cat tut (vgl. Das lszitierte Dateidebakel ). Vielleicht sollte ich stattdessen "nicht immer" verwenden. Es ist weniger wahrscheinlich, dass ein solches Programm existiert.
dgc
7
Einstellen core.pagerauf den leeren String ( git config core.pager '') oder catwird nicht alles überhaupt laufen. Du kannst es selbst herausfinden, wenn du mir nicht glaubst ;-) Es gibt überhaupt keinen Grund, es auf einen Dummy-Befehl wie zu setzen no.
Mosvy
Vielen Dank! Ich hatte keine Ahnung, dass die leere Zeichenfolge keine Befehlsausführung verursachen würde. Was catwerden Sie sagen, dass git einen Sonderfall für die Zeichenfolge in dem Pager - Code hat - das heißt , die cateffektiv ein Synonym für „null“ ist? Ich würde erwarten, dass es ausgeführt wird cat.
dgc
Dies scheint tatsächlich der Fall zu sein. Egads. Aber auch gut: Ich suche immer nach mehr Möglichkeiten, meine Abneigung gegen Schwachsinn zu rechtfertigen.
dgc