Как заставить git diff записывать в stdout?


93

По умолчанию git diffвсе +-строки выводятся в стандартный вывод, однако у меня есть (девианская) машина (которую я подключаю через 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

Есть место, где я скучаю? Может быть, неизвестный инструмент - это запасной вариант или что-то в этом роде, потому что на моей машине что-то не хватает? Любая помощь приветствуется. Спасибо.


Ответы:


167

По умолчанию Git отправляет свой вывод diff (и, как правило, любой вывод, который может занимать больше экрана) на системный пейджер , который представляет собой утилиту, которая печатает только один экран вывода за раз. Если вы хотите отключить пейджер при запуске команды, перейдите --no-pagerк Git:

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

Это можно запустить для любой команды Git.

Если вы хотите отключить его по умолчанию только для diff , вы можете установить для него пейджер cat, запустив:

$ git config pager.diff false

Если вы хотите отключить его по умолчанию для всех команд , вы можете установить для пейджера Git значение cat, запустив:

$ git config --global core.pager cat

Не знал о пейджере. git config --global core.pager catсделал это!. Спасибо :)
nacho4d

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

Я вижу, «git --no-pager diff» отличается от «git diff --no-pager». Спасибо за разъяснения
Ааронбауман

1
То же самое работает git branch, напримерgit config pager.branch false
dinjas

30

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

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

Он немедленно завершается, если разница помещается на первом экране (-F ), выводит необработанные управляющие символы (-R ), обрезает длинные строки, а не обертывает ( -S), и не использует termcap init / deinit strings ( -X).


1
Спасибо .. Я искал этот вариант по всему интернету :)
obai

Это то, что я хочу
user3595632

20

Вы также можете просто использовать catдля любой gitкоманды, если вам не нужны цвета.

Итак, git diff | catдля вашего случая.

Изменить: как указано в комментариях, если вы заботитесь об использовании цветов:

git diff --color | cat


9
И если вам git diff --color | cat
важны
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.