Wie kann man git diff dazu bringen, in stdout zu schreiben?

90

Standardmäßig werden git diffalle +-Zeilen auf dem Standard ausgegeben, ich habe jedoch eine (devian) Maschine (die ich über ssh verbinde), git diffdie mich zu einem Editor führt (von dem ich nicht weiß, welcher ist), und ich muss drücken, qum fortzufahren.

Ich habe checker git config und es sieht so aus:

$ git config --list
user.name=XXX
user.email=XXX@XXX
color.ui=false
difftool.prompt=false
mergetool.prompt=false
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=XXX
branch.master.remote=origin
branch.master.merge=refs/heads/master
$ git config --global --list
user.name=XXX
user.email=XXX@XXX
color.ui=false
difftool.prompt=false
mergetool.prompt=false
$ git config --system --list
'/etc/gitconfig': No such file or directory

Gibt es einen Ort, den ich vermisse? Vielleicht ist das unbekannte Werkzeug ein Fallback oder so, weil mir auf meiner Maschine etwas fehlt? Jede Hilfe wird geschätzt. Vielen Dank.

nacho4d
quelle
Mögliches Duplikat von Wie verhindere ich, dass Git Diff einen Pager verwendet?
Ciro Santilli 法轮功 冠状 病 六四 事件 30

Antworten:

163

Standardmäßig sendet Git seine Diff-Ausgabe (und im Allgemeinen jede Ausgabe, die mehr als eine Bildschirmausgabe sein kann) an den Pager des Systems , ein Dienstprogramm, das jeweils nur eine Bildschirmausgabe druckt. Wenn Sie den Pager deaktivieren möchten, wenn Sie einen Befehl ausführen, übergeben Sie ihn --no-pageran Git:

$ git --no-pager <subcommand> <options>

Dies kann für jeden Git-Befehl ausgeführt werden.

Wenn Sie es standardmäßig nur für diff deaktivieren möchten , können Sie den diff-Pager auf Folgendes einstellen cat:

$ git config pager.diff false

Wenn Sie es standardmäßig für alle Befehle deaktivieren möchten , können Sie den Git-Pager auf Folgendes einstellen cat:

$ git config --global core.pager cat
Mipadi
quelle
Ich wusste nichts über den Pager. git config --global core.pager catgeschafft!. Vielen Dank :)
nacho4d
4
@aaronbauman: Hast du es weitergegeben git( nicht an den Unterbefehl)?
Mipadi
Ich sehe, "git --no-pager diff" unterscheidet sich von "git diff --no-pager". Vielen Dank für die Klarstellung
Aaronbauman
1
Das Gleiche gilt für git branchzBgit config pager.branch false
Dinjas
29

Der folgende core.pagerWert wird verwendet less, der auf stdout gedruckt wird und über Pager-Funktionen verfügt (falls erforderlich), die das Scrollen nach oben und unten ermöglichen (im Gegensatz zu cat):

$ git config --global core.pager "less -FRSX"

Es wird sofort beendet, wenn das Diff auf den ersten Bildschirm passt ( -F), gibt unformatierte Steuerzeichen ( -R) aus, schneidet lange Zeilen anstatt -Sumbrechen ( -X) und verwendet keine termcap init / deinit-Zeichenfolgen ( ).

friederbluemle
quelle
1
Vielen Dank .. Ich habe im Internet nach dieser Option gesucht :)
Obai
Dies ist, was ich will
user3595632
17

Sie können auch einfach catfür jeden gitBefehl verwenden, wenn Sie sich nicht für die Farben interessieren.

Also git diff | catfür deinen Fall.

Bearbeiten: Wie in den Kommentaren erwähnt, wenn Sie sich für die Farben interessieren, verwenden Sie:

git diff --color | cat

Shasak
quelle
9
Und wenn Sie sich für die Farben interessieren, tun Sie es git diff --color | cat
interessieren