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.

nacho4d
źródło
możliwy duplikat Jak mogę zapobiec używaniu pagera przez git diff?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

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
mipadi
źródło
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).

friederbluemle
źródło
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

Shasak
źródło
9
A jeśli zależy Ci na kolorach, zrób to git diff --color | cat(:
xjcl