Как я могу запретить git diff использовать пейджер?
Есть ли переключатель командной строки для передачи на git diff
и другие команды, которые используют less
пейджер по умолчанию?
Я знаю, что могу передать это коту, но это удаляет всю подсветку синтаксиса.
Я знаю, что могу установить пейджер в глобальном.gitconfig на cat GITPAGER=cat
(или что-то типа того); но я хочу иногда пейджер (в зависимости от размера различий).
Но я бы предпочел переключатель командной строки, если он есть; и я не могу найти его, просматривая страницы руководства.
20 ответов
--no-pager
мерзавец скажет это не использовать пейджер. Передача опции -F
меньше скажет это не страница, если выход помещается на одном экране.
Использование:
git --no-pager diff
Другие варианты из комментариев включают в себя:
# set an evaporating environment variable to use cat for your pager
GIT_PAGER=cat git diff
# tell less not to paginate if less than a page
export LESS="-F -X $LESS"
# ...then git as usual
git diff
Как упоминалось в предыдущем ответе, прохождение -F
Если выбрано значение less, содержимое будет закрыто, если содержимое меньше одного экрана, однако после этого экран будет перезагружен, и вы в конечном итоге не увидите содержимое, -X
вариант покончил с этим поведением. Итак, я использую следующее для включения условного подкачки на основе объема контента:
git config --global --replace-all core.pager "less -F -X"
Использование
git config --global core.pager cat
избавиться от пейджера для всех команд для всех репозиториев.
Вы также можете отключить подкачку для отдельных команд git, используя pager.<cmd>
установка вместо core.pager
и вы можете изменить настройки для каждого git-репозитория (опущено --global
).
Увидеть man git-config
и искать pager.<cmd>
для деталей.
Вы также можете отключить / включить пейджеры для определенных выходов в глобальной конфигурации:
git config --global pager.diff false
Или, чтобы установить опцию core.pager, просто предоставьте пустую строку:
git config --global core.pager ''
На мой взгляд, это лучше, чем устанавливать cat
как ты говоришь.
Последние изменения в документации упоминают другой способ удаления опции по умолчанию для less
("параметры по умолчанию" FRSX
).
По этому вопросу это будет (git 1.8+)
git config --global --replace-all core.pager 'less -+F -+X'
Например, Dirk Bester предлагает в комментариях:
export LESS="$LESS -FRXK"
так что я получаю цветные различия с Ctrl-C выйти из
less
,
Wilson F. упоминает в комментариях и в своем вопросе, что:
less поддерживает горизонтальную прокрутку, поэтому, когда строки обрезаются, less отключает quit-if-one-screen, чтобы пользователь мог по-прежнему прокручивать текст влево, чтобы увидеть, что было обрезано.
Эти изменения уже были видны в git 1.8.x, как показано в разделе " Всегда используйте пейджер для git diff
" (см. комментарии). Но документация была переписана ( для git 1.8.5 или 1.9, четвертый квартал 2013 года).
Просмотрщик текста для использования командами Git (например, 'less').
Значение предназначено для интерпретации оболочкой.Порядок предпочтений:
$GIT_PAGER
переменная окружения,- затем
core.pager
конфигурации,- затем
$PAGER
,- и затем значение по умолчанию, выбранное во время компиляции (обычно "меньше").
Когда
LESS
переменная окружения не установлена, Git устанавливает ееFRSX
(еслиLESS
переменная окружения установлена, Git не меняет ее вообще).Если вы хотите выборочно переопределить настройки Git по умолчанию для
LESS
Вы можете установитьcore.pager
напримерless -+S
,
Это будет передано оболочке Git, которая переведет последнюю команду вLESS=FRSX less -+S
, Среда сообщает команде, чтобы установитьS
возможность обрезать длинные строки, но командная строка сбрасывает его по умолчанию, чтобы сложить длинные строки.
См. Commit 97d01f2a по причине новой редакции документации:
конфиг: переписать core.pager
документация
Текст упоминает
core.pager
а такжеGIT_PAGER
без предоставления общей картины приоритета. Взять лучшее описание изgit var
(1) документация.Использование механизма, позволяющего создавать общесистемные, глобальные файлы и файлы конфигурации для каждого хранилища, не ограничивается этой конкретной переменной. Удалите его, чтобы уточнить абзац.
Перепишите часть, которая объясняет, как переменная окружения
LESS
установлено значение Git по умолчанию, и как его выборочно настроить.
Примечание: коммит b327583 ( Матье Мой moy
, Апрель 2014 г., для git 2.0.x/2.1, Q3 2014) по умолчанию удалит S:
пейджер: по умолчанию убрать 'S' из $LESS
По умолчанию Git используется для установки
$LESS
в-FRSX
если$LESS
не был установлен пользователем.
FRX
флаги на самом деле имеют смысл для Git (F
а такжеX
потому что иногда на выходе Git трубы меньше, аR
потому что мерзкие трубы цветные по выходным).
S
flag (chop long lines), с другой стороны, не относится к Git и зависит от предпочтений пользователя. Git не должен решать для пользователя, чтобы изменитьLESS
по умолчанию.Более конкретно,
S
флаг наносит вред пользователям, которые просматривают недоверенный код в пейджере, поскольку патч выглядит так:
-old code;
+new good code; [... lots of tabs ...] malicious code;
будет выглядеть идентично:
-old code;
+new good code;
Пользователи, которые предпочитают старое поведение, могут все еще установить переменную среды $LESS в
-FRSX
явно, или установите для core.pager значение 'less -S
".
Документация будет читать:
Окружающая среда не устанавливает
S
вариант, но командная строка делает, инструктируя меньше обрезать длинные строки.
Аналогично, настройкаcore.pager
вless -+F
деактивируетF
Опция, указанная средой из командной строки, отключив "quit if one screen
"поведениеless
,
Можно специально активировать некоторые флаги для определенных команд: например, настройкаpager.blame
вless -S
разрешает усечение строки только дляgit blame
,
Это работало для меня с git версии 2.1.4 в Linux:
git config --global --replace-all core.pager cat
Это делает использование мерзавца cat
вместо less
, cat
просто сбрасывает вывод diff
на экран без какой-либо подкачки.
Относительно отключенного цвета при обвязке:
использование --color
чтобы избежать того, что окраска отключена.
git diff --color | less -R
Или настройте его принудительно (например, в.gitconfig):
[color]
ui = on
git diff | less -R
Для нецветных инструментов используйте:
git diff --no-color | some-primitive-tool
Экспорт переменной среды LESS=-R
(например,.bashrc) включает поддержку цвета по умолчанию в "less":
git diff | less
Я люблю отключать пейджинг время от времени, когда знаю, что вывод не очень длинный. Для этого я нашел хитрый трюк с использованием псевдонимов git:
git config --global --add alias.n '!git --no-pager'
Или добавьте следующее к [alias]
раздел ~/.gitconfig:
n = !git --no-pager
Это означает, что вы можете использовать префикс n
отключить подкачку для любой команды git, т.е.
git n diff # Show the diff without pager
git n log -n 3 # Show the last 3 commits without pager
git n show v1.1 # Show information about a tag
Вы можете добавить псевдоним diff для своего собственного пейджера с помощью pager.alias, например:
[alias]
dc = diff
dsc = diff --staged
[pager]
dc = cat
dsc = cat
Это позволит сохранить цвет и использовать 'cat' как пейджер при вызове в 'git dc'.
Кроме того, вещи не делать:
- используйте --no-pager в своем псевдониме. Git (1.8.5.2, Apple Git-48) будет жаловаться на то, что вы пытаетесь изменить среду.
- используйте оболочку с!sh или!git. Это обойдёт ошибку среды, описанную выше, но сбросит ваш рабочий каталог (для целей этой команды) на git dir верхнего уровня, поэтому любые ссылки на локальный файл не будут работать, если вы уже находитесь в подкаталоге вашего Сделки рЕПО.
Как говорится на man git, вы можете использовать --no-pager
по любой команде.
Я использую это на:
git --no-pager diff
git --no-pager log --oneline --graph --decorate --all -n 10
Затем используйте псевдоним, чтобы избежать использования (и запоминания) длинных команд.
У меня есть этот кусок в моем .gitconfig
и, кажется, работает нормально (отключено для diff и show):
[pager]
diff = false
show = false
Если вы используете oh-my-zsh, в файле ~/.oh-my-zsh/lib/misc.zsh прокомментируйте эту строку
env_default 'LESS' '-R'
По умолчанию git использует less как пейджер. Обычно я предпочитаю больше, так как он напечатает первую страницу, а затем позволит вам прокручивать содержимое.
Кроме того, после завершения содержимое останется в консоли. Обычно это удобно, поскольку вы часто хотите что-то сделать с контентом после поиска (например, отправить сообщение коммитеру по электронной почте и сообщить ему, что он внес ошибку в свою последнюю фиксацию).
Если вы затем захотите передать контент по конвейеру, было бы неудобно прокручивать, чтобы распечатать все. Плюс в том, что вы сможете объединить его с конвейером, и он будет проходить через все, например.
# Find the commit abcdef123 in the full commit history and read author and commit message
git log |grep -C 5 'abcdef123'
По сути, больше - это все, что вам когда-либо понадобится, если только вы не хотите, чтобы контент оставался в консоли после завершения. Чтобы использовать больше, выполните следующие действия.
git config --global core.pager 'more'
Просто следуйте инструкциям ниже.
- Просто введите
vi ~/.gitconfig
в вашем терминале. - Вставить
LESS="-F -X $LESS"
линия. - Нажмите
:wq
и войдите. - Перезагрузите ваш терминал.
Для Windows это:
git config --global core.pager ""
Это отключит пейджинг для всего в git
, в том числе очень надоедливый в git branch
.
Я удивлен, что еще не видел этого ответа, но просто:
PAGER= git diff ...
Приложение A. Я работаю в macOS и используюzsh
, не уверен, что это что-то меняет.
Приложение B. Как уже отмечалось, это не лучшее решение, если вы хотите использовать его как часть скрипта или неконтролируемой среды, где$GIT_PAGER
может быть установлено.
ЛУЧШАЯ пагинацияless -R -F -X
# Global - all projects (if has no custom local pager)
git config --global core.pager '/usr/bin/less -R -F -X'
# Local - Only on project
git config core.pager '/usr/bin/less -R -F -X'
Для быстрого и грязного сценария, который я написал, я сделал это так:
PAGER=cat git diff ...
В связи с этим, если у вас установлен пейджер по умолчанию и вы хотите создать псевдоним, который использует другой пейджер, вы можете использовать
-c
возможность передать параметр конфигурации только одной команде.
Например, у меня в качестве пейджера git по умолчанию настроена дельта , но я могу создать
lessdiff
такой псевдоним, для случаев, когда я хочу использовать
less
вместо.
[alias]
lessdiff = -c core.pager=less diff
git -P diff
Или --no-pager
.
Кстати: сохранить цвет с кошкой
git diff --color=always | cat