Як змусити git diff писати в stdout?


93

За замовчуванням git diffдрукує всі +-рядки в stdout, однак у мене є (devian) машина (яку я підключаю через ssh), де git diffведе мене до редактора (який я не знаю, який це), і мені потрібно натиснути, qщоб продовжити.

Я перевірив git config, і це виглядає так:

$ 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

Чи немає місця, де мені не вистачає? Можливо, невідомий інструмент є резервним чи що-небудь тому, що я моїй машині чогось не вистачає? Будь-яка допомога вдячна. Дякую.


Відповіді:


166

За замовчуванням Git надсилає свій вивід diff (і, як правило, будь-який вихід, який може бути більше, ніж скринінг) на пейджер системи , який є утилітою, яка одночасно друкує лише один екран результатів. Якщо ви хочете вимкнути пейджер під час запуску команди, перейдіть --no-pagerдо Git:

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

Це можна запустити для будь-якої команди Git.

Якщо ви хочете вимкнути його за замовчуванням лише для різниці , ви можете встановити різницю пейджера cat, запустивши:

$ git config pager.diff false

Якщо ви хочете вимкнути його за замовчуванням для всіх команд , ви можете встановити для пейджера Git cat, запустивши:

$ git config --global core.pager cat

Не знав про пейджер. git config --global core.pager catзробив це!. Дякую :)
nacho4d

4
@aaronbauman: Ви передали його git( не підкоманді)?
міпаді

Я бачу, "git --no-pager diff" відрізняється від "git diff --no-pager". Дякую за роз'яснення
aaronbauman

1
Те ж саме працює git branch, наприкладgit config pager.branch false
dinjas

30

Наступне core.pagerзначення використовує less, яке друкується у stdout, а також має функцію пейджера (якщо потрібно), що дозволяє прокручувати вгору та вниз (на відміну cat):

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

Він негайно припиняє роботу, якщо диф розміщується на першому екрані ( -F), видає необроблені контрольні символи ( -R), замість обгортання довгих рядків, а не обтікання ( -S), і не використовує рядки init / deinit termcap ( -X).


1
Дякую .. Я шукав цей варіант по всьому Інтернету :)
obai

Це те, що я хочу
user3595632

20

Ви також можете просто використовувати catбудь-яку gitкоманду, якщо вам байдужі кольори.

Тож git diff | catдля вашої справи.

Редагувати: як зазначено в коментарях, якщо ви дбаєте про використання кольорів:

git diff --color | cat


9
А якщо вам все одно до кольорів, робіть git diff --color | cat(:
xjcl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.