Почему меньше управляет git без необходимости?

22

Когда я запускаю git branch(из bash или csh), он автоматически передает вывод less. Тем не менее, имея всего несколько веток в хранилище, это больше не нужно, это раздражает, так как список ветвей исчезает, как только я ухожу меньше.

Проверка ~/.gitconfigфайла и локальных .git/configфайлов не находит ничего о пейджере или чем-то еще, что могло бы вызвать это. В противном случае, я не нашел ничего полезного или многообещающего в веб-поиске.

Почему это происходит, и что (если что-нибудь) я могу сделать, чтобы lessзапустить, когда необходимо (например, когда делаю, git logкогда есть много истории), но не иначе (как a git branchтолько с 2 или 3 ветвями)?

GreenMatt
источник
4
В общем, git не знает, сколько выводится от любой команды, поэтому он отправляет все по умолчанию через пейджер, что, вероятно, будет меньше.
Икар
6
Первое , что делать на новой установке -nix, чтобы положить export LESS=-Xв .profile. Это позволяет избежать «очистки» экрана. Я ненавижу его , что стандартная установка очищает экран , потому что часто нужно вырезать и вставить материал или использовать его в качестве ссылки.
Питер - Восстановить Монику
3
@ Петр Чтобы быть понятным (не каламбур), это должны делать только люди, которые не хотят, чтобы экран очищался.
Дэвид Z
@icarus: это кажется логичным. Однако мое поведение недавно изменилось. Я не уверен, почему - вероятно, изменение какой-то переменной среды вынудило сотрудников корпоративной безопасности "на высоте", которым, кажется, не важно, насколько трудными они делают работу всех остальных. В любом случае, git внезапно перешел от того, что я считал разумным поведением, к пропуску однострочных выходов через меньшее таким образом, что вывод был потерян, когда я остановился меньше.
GreenMatt
Если поведение недавно изменилось, то, по крайней мере, возможно, что параметр переменной LESS был добавлен в общесистемные файлы запуска оболочки, например, / etc / profile, /etc/profile.d/*, /etc/bash.bashrc, У вас есть эта переменная в вашей среде?
Икар

Ответы:

35

Вы можете установить следующее:

git config --global core.pager 'less -FRX'

Это будет гарантировать, что lessбудет

  • Выход, если весь файл может быть отображен на первом экране ( F)
  • Вывести необработанные управляющие символы для форматирования терминала ( R)
  • Нарезать длинные линии ( S)
  • Не отправляйте строки init / de-init в терминал - избегает очистки экрана при выходе ( X)

Редактировать: удалена Sопция, основанная на комментарии Питера А. Шейдера

QIS
источник
7
и опустите, --globalесли вы хотите, чтобы он применялся только к текущему хранилищу.
Мосви
8
Установка переменной среды LESSв значение -FR, добавление X и S по вкусу - это еще один способ.
Икар
2
См. Также unix.stackexchange.com/questions/469360/…
Икар
11
Скорее всего, ОП находит такое поведение раздражающим в целом; Я полагаю, что можно установить переменную окружения, export PAGER='less -FRSX'и git соблюдает ее (при отсутствии определенной конфигурации git). Кстати, -Sэто опасно, потому что он молча отбрасывает вывод.
Питер - Восстановить Монику
4

Здесь есть несколько отличных ответов о настройке lessповедения, но, поскольку мои седобородые пальцы привыкли печатать, |moreкогда я этого хочу, и, поскольку я все еще в большей степени отношусь к ртути, чем к мерзавцу, я увлечен

git config --global core.pager cat
DGC
источник
3
Страница man для git-configсостояний указывает, что значение core.pagerпредназначено для интерпретации оболочкой. Когда вы устанавливаете его no, он пытается выполнить команду no, которая, скорее всего, не существует, а затем возвращается к простому выводу содержимого. Вы все равно увидите сообщение об ошибке в голове. Что вы, вероятно, хотите сделать, это установить его catвместо.
QIS
1
Это хороший кусок информации, но то , что мне нравится, что он не выполняет ничего . catБесполезно, и я не особо доверяю Linux Util Сопровождающие не изменить то , что кошка делает (см на lsцитируемый файлы фиаско ). Может быть, я должен использовать "не когда-либо" вместо этого. Менее вероятно, что такая программа существует.
DGC
7
Установка core.pagerпустой строки ( git config core.pager '') или to неcat будет запускать что-либо вообще. Вы можете решить это самостоятельно, если не верите мне ;-) Нет никаких оснований для того, чтобы установить его в качестве фиктивной команды . no
Мосви
Большое спасибо! Я понятия не имел, что пустая строка не вызовет выполнения команды. Что касается того cat, говорите ли вы, что у git есть специальный случай для этой строки в коде пейджера - то есть это catфактически синоним для «ноль»? Я ожидаю, что это выполнится cat.
DGC
Это действительно похоже на случай. Egads. Но также хорошо: я всегда ищу больше способов оправдать мое отвращение к мерзавцу.
DGC