Как я могу запретить git diff использовать пейджер? - PullRequest
534 голосов
/ 02 февраля 2010

Есть ли переключатель командной строки для передачи на git diff и другие команды, которые используют пейджер less по умолчанию?

Я знаю, что могу передать это коту, но это удаляет всю подсветку синтаксиса.

Я знаю, что могу установить пейджер в глобальном .gitconfig для cat на GITPAGER=cat (или что-то в этом роде); но я хочу иногда иметь пейджер (в зависимости от размера различий).

Но я бы предпочел переключатель командной строки, если он есть; и я не могу найти его, просматривая справочные страницы.

Ответы [ 13 ]

588 голосов
/ 02 февраля 2010

--no-pager 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
224 голосов
/ 02 января 2013

Как упоминалось в предыдущем ответе, передача параметра -F на less приводит к его выходу, если содержимое меньше одного экрана, однако после этого экран сбрасывается, и в итоге вы не видите содержимое, -X опция избавляет от такого поведения. Итак, я использую следующее для включения условного подкачки на основе объема контента:

git config --global --replace-all core.pager "less -F -X"
141 голосов
/ 08 августа 2011

Используйте

git config --global core.pager cat

чтобы избавиться от пейджера для всех команд для всех репозиториев.

Вы также можете отключить подкачку для отдельных подкоманд git, используя параметр pager.<cmd> вместо core.pager, и вы можете изменить настройки для каждого репозитория git (пропустите --global).

См. man git-config и найдите pager.<cmd> для получения подробной информации.

66 голосов
/ 13 сентября 2013

В последних изменениях в документации упоминается другой способ удаления параметра по умолчанию для less («параметрами по умолчанию» является FRSX).

Для этого вопроса это будет (git 1.8 +)

git config --global --replace-all core.pager 'less -+F -+X'

Например, Дирк Бестер предлагает в комментариях :

export LESS="$LESS -FRXK" 

так, чтобы я получил цветную разницу с Ctrl-C выход из less.

Уилсон Ф. упоминает в комментариях и его вопрос , что:

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 по причине новой редакции документации:

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, заданной средой, из командной строки, отключив поведение less * *1147*.
Можно специально активировать некоторые флаги для определенных команд: например, установка pager.blame в less -S разрешает усечение строки только для git blame.

46 голосов
/ 12 июля 2014

Вы также можете отключить / включить пейджеры для определенных выходов в глобальной конфигурации:

git config --global pager.diff false

Или чтобы установить опцию core.pager, просто введите пустую строку:

git config --global core.pager ''

На мой взгляд, это лучше, чем установить cat, как вы говорите.

9 голосов
/ 19 апреля 2015

Это сработало для меня с git версии 2.1.4 в Linux:

git config --global --replace-all core.pager cat

Это заставляет git использовать cat вместо less. cat просто выводит вывод diff на экран без подкачки.

9 голосов
/ 27 февраля 2012

Относительно отключенного цвета при обвязке:

Используйте --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 голосов
/ 22 апреля 2014

Вы можете добавить псевдоним 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 верхнего уровня, поэтому любые ссылки на локальный файл не будут работать, если вы уже находитесь в подкаталоге вашего Сделки рЕПО.
5 голосов
/ 23 февраля 2019

У меня есть этот кусок в моем .gitconfig, и он, кажется, работает нормально (отключено для diff и show):

[pager]
    diff = false
    show = false
3 голосов
/ 09 февраля 2016

Мне нравится время от времени отключать пейджинг, когда я знаю, что вывод не очень длинный. Для этого я нашел хитрый трюк с использованием псевдонимов 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...