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.


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

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 ( ).


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


9
Und wenn Sie sich für die Farben interessieren, tun Sie es git diff --color | cat
interessieren
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.