Jak zmusić git diff do zapisu na stdout?


93

Domyślnie git diffwypisuje wszystkie +-linie na stdout, jednak mam maszynę (devian) (którą łączę się przez ssh), gdzie git diffprowadzi mnie do edytora (którego nie wiem, który jest) i muszę nacisnąć, qaby kontynuować.

Mam checker git config i wygląda to tak:

$ 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

Czy brakuje mi miejsca? Może nieznane narzędzie jest awaryjne lub coś takiego, ponieważ mój komputer czegoś brakuje? Każda pomoc jest mile widziana. Dzięki.


Odpowiedzi:


167

Domyślnie Git wysyła swoje wyjście różnicowe (i ogólnie każde wyjście, które może być większe niż ekranowe) do pagera systemowego , który jest narzędziem, które drukuje tylko jeden ekran wyjścia na raz. Jeśli chcesz wyłączyć pager po uruchomieniu polecenia, przekaż --no-pagerdo Gita:

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

Można to uruchomić dla dowolnego polecenia Git.

Jeśli chcesz wyłączyć to domyślnie tylko dla diff , możesz ustawić pager diff na cat:

$ git config pager.diff false

Jeśli chcesz wyłączyć to domyślnie dla wszystkich poleceń , możesz ustawić pager Git na cat, uruchamiając:

$ git config --global core.pager cat

Nie wiedziałem o pagerze. git config --global core.pager catzrobił to !. Dziękuję :)
nacho4d

4
@aaronbauman: Czy przekazałeś to git( nie podkomendie)?
mipadi

Widzę, "git --no-pager diff" różni się od "git diff --no-pager". Dziękuję za wyjaśnienie
aaronbauman

1
To samo działa git branchnp.git config pager.branch false
dinjas

30

Następująca core.pagerwartość używa less, która drukuje na stdout, a także ma funkcjonalność pagera (jeśli jest to wymagane), umożliwiając przewijanie w górę iw dół (w przeciwieństwie cat):

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

Natychmiast kończy pracę, jeśli diff pasuje do pierwszego screen ( -F), wypisuje surowe znaki sterujące ( -R), odcina długie linie zamiast wrapping ( -S) i nie używa termcap init / deinit strings ( -X).


1
Dziękuję .. Szukałem tej opcji w całym internecie :)
obai

To jest to, czego chcę
user3595632

20

Możesz także po prostu użyć catdowolnego gitpolecenia, jeśli nie dbasz o kolory.

Więc git diff | catdla twojego przypadku.

Edycja: jak wskazano w komentarzach, jeśli zależy Ci na kolorach, użyj:

git diff --color | cat


9
A jeśli zależy Ci na kolorach, zrób to git diff --color | cat(:
xjcl
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.