Как предотвратить использование git diff от использования пейджера?

Есть ли переключатель командной строки для перехода к 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'