Есть ли переключатель командной строки для перехода к git diff
и другим командам, использующим пейджер less
по умолчанию?
Я знаю, что могу направить его на cat, но это устраняет выделение синтаксиса.
Я знаю, что могу настроить пейджер в глобальном .gitconfig для cat GITPAGER=cat
(или что-то в этом роде); но иногда я хочу иметь пейджер (в зависимости от размера diff).
Но, я бы предпочел бы переключатель командной строки, если он есть; и я не могу найти его, просматривая страницы руководства.
Ответ 1
--no-pager
to git скажет ему не использовать пейджер. Передача опции -F
в less приведет к тому, что она не будет отображаться на странице, если выходные данные помещаются на одном экране.
Использование:
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
Ответ 2
Как упоминалось в предыдущем ответе, передача параметра -F
на меньшее приводит к его завершению, если содержимое меньше одного экрана, однако после этого экран reset и вы не видите контент, Опция -X
устраняет это поведение. Поэтому я использую следующее, чтобы включить условный пейджинг в зависимости от количества контента:
git config --global --replace-all core.pager "less -F -X"
Ответ 3
Использование
git config --global core.pager cat
чтобы избавиться от пейджера для всех команд для всех репозиториев.
Вы также можете отключить пейджинг для отдельных подкоманд git, используя pager.<cmd>
вместо core.pager
, и вы можете изменить свои настройки в репозитории git (опустить --global
).
Подробнее см. man git-config
и найдите pager.<cmd>
.
Ответ 4
В последних изменениях в документации упоминается другой способ удаления опции по умолчанию для less
("опциями по умолчанию" является FRSX
).
Для этого вопроса это будет (git 1. 8+)
git config --global --replace-all core.pager 'less -+F -+X'
Например, Дирк Бестер предлагает в комментариях:
export LESS="$LESS -FRXK"
так что я получаю цветной diff с Ctrl-C выходом из less
.
Уилсон Ф. упоминает в комментариях и в своем вопросе, что:
less поддерживает горизонтальную прокрутку, поэтому, когда строки обрезаются, less отключает quit-if-one-screen, чтобы пользователь мог по-прежнему прокручивать текст влево, чтобы увидеть, что было обрезано.
Эти изменения уже были видны в git 1.8.x, как показано в "Всегда использовать пейджер для git diff
" (см. комментарии).
Но документация только что перефразировалась (для git 1.8.5 или 1.9, четвертый квартал 2013 года).
Просмотрщик текста для использования командами Git (например, "меньше").
Значение предназначено для интерпретации оболочкой.
Порядок предпочтений:
- переменная окружения
$GIT_PAGER
,
- затем
core.pager
,
- затем
$PAGER
,
- и затем значение по умолчанию, выбранное во время компиляции (обычно "меньше").
Когда переменная окружения LESS
не установлена, Git устанавливает ее в FRSX
(если установлена переменная окружения LESS
, Git не меняет ее вообще).
Если вы хотите выборочно переопределить настройку Git по умолчанию для LESS
, вы можете установить core.pager
на, например, less -+S
.
Это будет передано оболочке Git, которая переведет последнюю команду в LESS=FRSX less -+S
. Среда указывает команде установить параметр S
для обрезки длинных строк, но командная строка сбрасывает его по умолчанию для сгиба длинных строк.
См. commit 97d01f2a, чтобы узнать причину новой редакции документации:
config: переписать core.pager
документацию
В тексте упоминаются core.pager
и GIT_PAGER
без предоставления общей картины приоритета. Найдите лучшее описание из git var
(1) документации.
Использование механизма, позволяющего создавать общесистемные, глобальные файлы и файлы конфигурации для каждого хранилища, не ограничивается этой конкретной переменной. Удалите его, чтобы уточнить абзац.
Перепишите часть, которая объясняет, как для переменной среды LESS
установлено значение Git по умолчанию, и как ее выборочно настроить.
Примечание. commit b327583 (Matthieu Moy moy
, апрель 2014 г., для git 2.0.x/2.1, Q3 2014) по умолчанию удалит S:
пейджер: по умолчанию удалите 'S' из $ LESS
По умолчанию Git использовал для $LESS
значение -FRSX
, если $LESS
не был задан пользователем.
Флаги FRX
на самом деле имеют смысл для Git (F
и X
, потому что иногда выходной канал Git меньше, а R
, потому что Git передает цветной вывод).
Флаг S
(обрезать длинные строки), с другой стороны, не относится к 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
.
Ответ 5
Вы можете отключить и включить пейджеры для определенных выходов в глобальной конфигурации:
git config --global pager.diff false
Или установите параметр core.pager, просто укажите пустую строку:
git config --global core.pager ''
Это, на мой взгляд, лучше, чем установка cat
, как вы говорите.
Ответ 6
Относительно цвета с отключенным контуром:
Используйте --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
Ответ 7
Это работало для меня с git версией 2.1.4 в Linux:
git config --global --replace-all core.pager cat
Это делает git использовать cat
вместо less
. cat
просто выгружает вывод diff
на экран без какого-либо пейджинга.
Ответ 8
Вы можете добавить псевдоним для разницы с собственным пейджером с помощью pager.alias, например:
[alias]
dc = diff
dsc = diff --staged
[pager]
dc = cat
dsc = cat
Это позволит сохранить цвет и использовать "cat" в качестве пейджера при вызове в 'git dc'.
Кроме того, не нужно делать:
- используйте псевдоним в вашем псевдониме. Git (1.8.5.2, Apple Git -48) будет жаловаться на то, что вы пытаетесь изменить среду.
- используйте оболочку с! sh или! git. Это обходит ошибку среды выше, но будет reset ваш рабочий каталог (для целей этой команды) в директории верхнего уровня Git, поэтому любые ссылки на локальный файл не будут работать, если вы уже находитесь в subdir вашего репо.
Ответ 9
У меня есть этот кусок в моем .gitconfig
и он, кажется, работает нормально (отключено для diff и show):
[pager]
diff = false
show = false
Ответ 10
Мне нравится время от времени отключать пейджинг, когда я знаю, что выход не очень длинный. Для этого я нашел аккуратный трюк, используя git aliases:
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
Ответ 11
Для быстрого и грязного script я написал, я сделал это следующим образом:
PAGER=cat git diff ...
Ответ 12
Как говорится в man git, вы можете использовать --no-pager
для любой команды.
Я использую это на:
git --no-pager diff
git --no-pager log --oneline --graph --decorate --all -n 10
Затем используйте псевдоним, чтобы избежать использования (и запоминания) длинных команд.
Ответ 13
если вы используете oh-my-zsh, в файле ~/.oh-my-zsh/lib/misc.zsh прокомментируйте эту строку
env_default 'LESS' '-R'
Ответ 14
Для Windows это:
git config --global core.pager ""
Это отключит пейджинг для всего в git
, включая супер раздражающий в git branch
.
Ответ 15
git -P diff
Или --no-pager
.
Кстати: чтобы сохранить цвет с кошкой
git diff --color=always | cat
Ответ 16
是 使用 的 是 ой-мой-zsh 的 话 , 可以 注释掉 ~/.oh-my-zsh/lib/misc.zsh 文件 中
env_default 'LESS' '-R'