Подтвердить что ты не робот

Выключение пейджера в 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 не использует пейджер?

4b9b3361

Ответ 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"

- ваш друг.