Ich habe ein paar Git-Repositorys, die zusammengehören, und eine einfache Batch- / Bash-Datei, um sie zu durchlaufen. Ich überlaufe sie oft mit einem Protokollbefehl, um schnell zu sehen, in welchem Zustand sie sich befinden. Dies funktioniert gut, abgesehen von einer Sache: Wenn die Festschreibungsnachricht länger als die Anzahl der Zeichen ist, die meine Konsole breit ist (oder mehrere Zeilen hat), git zeigt die Zeile, dann eine neue Zeile mit (END) und ich muss q drücken, um fortzufahren (ich denke, es leitet die Ausgabe durch mehr oder so etwas). Beispiel:
> gitloop . "git log --decorate=short --pretty=oneline -n1"
18629ae238e9d5832cb3535ec88274173337a501 (HEAD, origin/master, master) short log
625fb891b9b0b8648459b07ace662ae3b7773c7f (HEAD, origin/master, origin/HEAD, master) short log
dc0838118266ba8570ea338c1faddfe8af0387bb (HEAD, origin/work, origin/master, work, master) oops loooooooooooooong log
-(END)
Dies ist ziemlich unpraktisch, da ich ein paar Mal q drücken muss , während ich nur all diese Oneliner auf einmal sehen möchte.
Wie kann ich dieses Verhalten deaktivieren (vorzugsweise unter Beibehaltung dieses Protokollformats)?
Antworten:
Git hat eine Option zum Deaktivieren des Pagers:
Wenn Ihr Pager Linien schneidet und Sie dieses Verhalten beibehalten möchten, leiten Sie entweder an
cut
...... oder setzen Sie die Umgebungsvariable
GIT_PAGER
vor dem Aufruf:quelle
--no-pager
die Standardeinstellung oder sogar eine Verknüpfung für diese Option bei Bedarf zu verbessern? Ich dachte an Aliasinggitnp
zugit --no-pager
, aber ich denke , es gibt eine bessere Lösung ist.git
,/usr/bin/git --no-pager
der den Pager für alle Ihre Git-Aufrufe deaktiviert.git
hat keinen eingebauten Pager. Stattdessen folgt es der Unix-Philosophie und verwendet alles, was Sie haben$PAGER
.git
verwendet einfach immer,$PAGER
anstatt dies nur zufällig zu tun, im Gegensatz zu vielen anderen schlecht geschriebenen Werkzeugen. Die einzige Magiegit
hat , ist , dass , wenn$LESS
sie nicht definiert , es definieren wird$LESS
auf dem WertFRX
. Siehe um github.com/git/git/blob/master/Documentation/config.txt#L766 für weitere Details.git
bietet einfach eine ÜberschreibungGIT_PAGER
, mit der Sie benutzerdefinierte Werte definieren können, die verwendet werden sollen, anstattPAGER
wann immer Git Paging benötigt.Eine weitere Lösung für das Problem der dauerhaften Deaktivierung des Pagers speziell bei Verwendung des
log
Unterbefehls:Nur für aktuelles Repo:
git config pager.log false
für Ihre Git-Installation (dh alle Repos auf Ihrem Computer):
git config --global pager.log false
Wie Sie sich vorstellen können, funktioniert dasselbe, wenn Pager benötigt wird auf oder ab selektiv für einige andere Unterbefehle.
Z.B. für
branch
den Unterbefehl (der Zweige druckt) wird es seingit config pager.branch false
Die vorgeschlagene Lösung ist im Vergleich zu wohl eleganter
Verwenden Sie
git --no-pager
jedes Mal, wenn Sie einen bestimmten Befehl ausführen.Weil es durchaus möglich ist, dass Sie es nicht jedes Mal eingeben möchten.
Angabe
git --no-pager
als Alias fürgit
Weil Sie möglicherweise implizite globale Konfigurationen vermeiden möchten oder in einigen Fällen den Pager aktivieren möchten .
stützen sich auf einige Umgebungsvariablen wie
PAGER
oderGIT_PAGER
.Dazu müssen Sie sicherstellen, dass sie in Ihrer aktuellen Terminalsitzung festgelegt sind. Wenn Sie möchten, dass sie bei jeder Erstellung Ihres neuen Terminals automatisch auf einen benutzerdefinierten Wert gesetzt werden, müssen Sie eine der Shell-Bootstrap-Dateien ändern, z
~/.bashrc
. Das ist kein großes Problem. Aber diese Bootstrap-Dateien werden häufig auch von anderen Anwendungen geändert und enthalten eine Reihe anderer Dinge, nicht nur die von Git verwendeten. Theoretisch ist es also besser, git-bezogene Einstellungen mit zu spezifizieren,git config
als sie z~/.bashrc
.Die alternative Lösung zum Deaktivieren
pager
für alle Unterbefehle besteht darin, anzugeben,cat
wie das Dienstprogramm git das Paging verwendet:git config core.pager cat
ODERgit config --global core.pager cat
Meine Antwort ist eine Umformulierung der folgenden:
"Verhindern Sie, dass Git Diff einen Pager verwendet?"
https://stackoverflow.com/a/6986231/6103242
Es wird darauf verwiesen, um auf eine andere relevante Diskussion hinzuweisen.
quelle
Pager für alle Befehle deaktivieren:
quelle
Sie leiten es an weniger -F weiter, falls --no-pager für Sie nicht funktioniert.
quelle