Отключение пейджера в git только для команды stash - PullRequest
25 голосов
/ 19 ноября 2010

Мне обычно нравится использование пейджера в git, но для git stash пейджер меня раздражает. При вызове git stash list я не хочу отображать три строки вывода в пейджере - это заставляет меня нажимать q, чтобы снова сделать вывод недоступным при вводе команды folow-up git stash pop.

Одним из решений будет использование

git --no-pager stash list

но это слишком много печатать (я ленивый). После справочной страницы git config я попробовал

git config --global pager.stash false

но, похоже, это не соответствует тому, что написано в документации (на самом деле я не заметил никакого эффекта). Тогда я попробовал

git config --global alias.stash "--no-pager stash"

снова без какого-либо заметного эффекта.

Конфигурация корректно обновляется, например,

git config pager.stash
false

Это просто не имеет никакого эффекта. Что мне не хватает? И как мне добиться, чтобы git stash не использовал пейджер?

Ответы [ 4 ]

31 голосов
/ 17 ноября 2011

Начиная с 1.7.7.3, git config --global pager.stash false выполняет это.

10 голосов
/ 19 ноября 2010

Похоже на stash, и любая другая не встроенная команда (записанная как сценарий оболочки, а не в 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.

Еще одно временное исправление, поскольку это сценарий оболочки, заключается в прямом редактировании libexec/git-core/git-stash. Просто найдите функцию list_stash и добавьте параметр --no-pager к ее вызову на git log, или, чтобы охватить весь сценарий, установите GIT_PAGER=cat вверху.

7 голосов
/ 26 марта 2012

В качестве альтернативы вы можете настроить less на выход, если выходной сигнал меньше одного экрана:

export LESS='-F'

Или, более подробно:

export LESS='--quit-if-one-screen'

Если у вас есть цветаgit output, вы, вероятно, также захотите передать флаг -r:

export LESS='-F -r'
0 голосов
/ 21 февраля 2015
stll = "!git --no-pager stash list"

твой друг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...