it-swarm.com.de

Git-Zweigbefehl verhält sich wie 'less'

Wenn ich den Befehl git branch zum Auflisten aller Zweige verwende, sehe ich die Ausgabe von git branch | less.

Der Befehl git branch soll eine Liste von Zweigen anzeigen, wie ls für Dateien.

Das ist die Ausgabe, die ich bekomme:

 Enter image description here

Wie erhalte ich das Standardverhalten von git branch? Was verursacht die seitenweise Ausgabe?

Ich verwende ZSH mit oh_my_zsh (nichts für Git drin) und mein .gitconfig sieht folgendermaßen aus:

[user]
  email = [email protected]
  name = Dennis Haegler
[Push]
  default = simple
[merge]
   tool = vimdiff
[core]
  editor = nvim
  excludesfile = /Users/dennish/.gitignore_global
[color]
  ui = true
[alias]
  br = branch
  ci = commit -v
  cam = commit -am
  co = checkout
  df = diff
  st = status
  sa = stash
  mt = mergetool
  cp = cherry-pick
  pl = pull --rebase
[difftool "sourcetree"]
  cmd = opendiff \"$LOCAL\" \"$REMOTE\"
[mergetool "sourcetree"]
  cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh 
  \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
  trustExitCode = true
157
DenniJensen

Wie oben erwähnt, war dies eine Standardverhaltensänderung eingeführt in Git 2.16 .

Sie können die Seitenausgabe für git branch standardmäßig mit der Einstellung pager.branch config deaktivieren :

git config --global pager.branch false
315
Zach Schneider

Nicht um über Semantik zu streiten, sondern über das Verhalten, das Sie erhalten ist die Standardeinstellung. Deshalb bekommst du es, wenn du nicht nach etwas anderem fragst. Standardmäßig verwenden branch (und zahlreiche andere git-Befehle) einen Pager, wenn Ausgaben an das Terminal gesendet werden.

Sie können diese Standardeinstellung mit der Option --no-pager Überschreiben

git --no-pager branch

Oder wenn Sie die Ausgabe in eine Datei umleiten, sollte git erkennen, dass sie nicht in ein Terminal schreibt, und sollte daher sowieso keinen Pager verwenden. (Auf der anderen Seite schlägt dies einen Anwendungsfall für Skripte vor. In diesem Fall sollten Sie in Betracht ziehen, einen Installationsbefehl wie git for-each-ref Anstelle von git branch Zu verwenden.)

22

Wie andere Antworten gezeigt haben, leitet git bei den meisten Befehlen standardmäßig einen Pager ein (standardmäßig less).

Ein wichtiger Punkt ist jedoch: Wenn die Umgebungsvariable LESS nicht gesetzt ist, setzt Git sie auf FRX . Dies hat zur Folge, dass das vom Benutzer sichtbare Verhalten dasselbe ist, als wäre der Pager bei der Ausgabe des Befehls nicht verwendet worden ist kurz (wenn Sie nur wenige Äste haben). Mann weniger :

-F oder --quit-if-one-Bildschirm
Bewirkt, dass weniger automatisch beendet wird, wenn die gesamte Datei auf dem ersten Bildschirm angezeigt werden kann.

-R oder --RAW-CONTROL-CHARS
[...] ANSI-Farb-Escape-Sequenzen werden in "roher" Form ausgegeben.

-X oder --no-init
Deaktiviert das Senden der Termcap-Initialisierungs- und Deinitialisierungszeichenfolgen an das Terminal. Dies ist manchmal wünschenswert, wenn die Deinitialisierungs-String macht etwas unnötiges, wie das Löschen der Bildschirm.

Wenn Sie das von Ihnen beschriebene Verhalten erhalten, haben Sie $LESS höchstwahrscheinlich auf eine andere Einstellung gesetzt. Wenn Sie die Einstellung aufheben, wird das Problem beseitigt, während das Pager-Verhalten für lange Ausgaben beibehalten wird. Alternativ können Sie das Verhalten aktivieren, während Sie $LESS so wie es ist, indem Sie es Ihrer .gitconfig-Datei hinzufügen:

[core]
    pager = less -FRX

Wenn Sie das Pager-Ding wirklich nicht mögen, können Sie es global oder auf Befehlsbasis deaktivieren (siehe andere Antworten).

20
Matthieu Moy

Für diejenigen, die ihren ~/.gitconfig aktualisieren möchten, um dies zu beheben, würde es so aussehen:

[pager]
   branch = false
4
Nick

dieses git-verhalten war auch immer ärgerlicher für mich ... Ich bekam meine Tagliste in less, wenn ich nur Tags auflisten wollte.

Sie können dieses Verhalten auch steuern, indem Sie die StandardeinstellungGit PAGERin cat anstelle von less..__ ändern. Ich würde lieber in iTerm scrollen als im Editor. Ich verwende den Editor gerne, wenn ich möchte.

So:

git config --global core.pager cat

Ich hoffe, es hilft.

3
ionescu77

Git-Verzweigungsbefehl verhält sich wie 'less'

Da Git standardmäßig die Ausgabe im Pager öffnet (zumindest in Ubuntu), ersetzt die akzeptierte Antwort den Pager vollständig, was Ihnen möglicherweise nicht gefällt, wenn Ihre Ausgabe sehr lang ist.

Ich würde empfehlen, den Pager durch less zu ersetzen, damit die Ausgaben nicht unter der Höhe des Terminals "gescrollt" werden.

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

2
Imran

Mach Folgendes:

[alias]
  br = !git --no-pager branch
1
João Tiago

https://git-scm.com/book/de/v2/Git-Internals-Environment-Variables

GIT_PAGER steuert das Programm, das zum Anzeigen der mehrseitigen Ausgabe auf .__ verwendet wird. die Befehlszeile Wenn dies nicht festgelegt ist, wird PAGER als Fallback verwendet.

Um Ihr Problem zu lösen, können Sie PAGER und GIT_PAGER in Ihrer Shell aufheben.

0
C-Otto