Выключение пейджера в git только для команды stash
Мне обычно нравится использование пейджера в git, но для git stash
пейджер меня раздражает. При вызове git stash list
я не хочу показывать три строки вывода в пейджере - это заставляет меня нажать q
только для того, чтобы сделать вывод недоступным снова при вводе следующей команды git stash pop
.
Одним из решений было бы использовать
git --no-pager stash list
но это много набрав (я ленив). Следуя странице man git config
, я попробовал
git config --global pager.stash false
но это не похоже на то, что говорит документация (на самом деле я не заметил никакого эффекта). Затем я попробовал
git config --global alias.stash "--no-pager stash"
снова без какого-либо заметного эффекта.
Конфигурация получает надлежащее обновление, например
git config pager.stash
false
Это просто не имеет никакого эффекта. Что мне не хватает? И как я могу достичь того, что git stash
не использует пейджер?
Ответы
Ответ 1
Похоже на stash, и любая другая не встроенная команда (написанная как оболочка script, а не на C) пропускает шаг конфигурации пейджера. Я отправил записку в список рассылки git с просьбой об этом; это похоже на известную проблему, но не совсем тривиально, чтобы исправить.
Основная причина, по которой вы не видите эффекта от вашего псевдонима, заключается в том, что git молча игнорирует псевдонимы для встроенных команд; идея состоит в том, что вы никогда не хотите, чтобы команда была недоступна. Чтобы псевдоним имел возможность запускать, вам нужно называть его чем-то иным, чем stash
.
Однако я считаю, что простые псевдонимы не могут влиять на среду, в которую запускается команда git, которая обычно включает опции, переданные самому git
. Если я использую псевдоним вроде твоего:
git config alias.foo --no-pager stash
git foo
fatal: alias 'foo' changes environment variables
Если вы хотите сделать это правильно, вам нужно будет использовать !git --no-pager stash
, чтобы он породил подоболочку и повторно запустил git.
Еще одно временное исправление, так как это оболочка script, - это прямое редактирование libexec/git-core/git-stash
. Просто найдите функцию list_stash
и добавьте опцию --no-pager
к ее вызову git log
или для охвата всего script, установите GIT_PAGER=cat
вверху.
Ответ 2
В соответствии с 1.7.7.3, git config --global pager.stash false
выполняет это.
Ответ 3
В качестве альтернативы вы можете настроить less
на выход, если на выходе меньше одного экрана:
export LESS='-F'
Или, вербально:
export LESS='--quit-if-one-screen'
Если у вас есть цвета в выводе git, вы, вероятно, также захотите передать флаг -r
:
export LESS='-F -r'
Ответ 4
stll = "!git --no-pager stash list"
- ваш друг.