Команда Git branch ведет себя как 'less'
Когда я использую команду git branch
для вывода списка всех ветвей, я вижу вывод git branch | less
git branch | less
Команда git branch
должна показывать список ветвей, как ls
делает для файлов.
Это вывод, который я получаю:
![Enter image description here]()
Как получить поведение по умолчанию для git branch
? Что вызывает постраничный вывод?
Я использую oh_my_zsh
с oh_my_zsh
(там нет ничего для Git), и мой .gitconfig
выглядит так:
[user]
email = [email protected]
name = Dennis Haegler
[push]
default = simple
[merge]
tool = vimdiff
[core]
editor = nvim
excludesfile = /Users/dennish/.gitignore_global
[color]
ui = true
[alias]
br = branch
ci = commit -v
cam = commit -am
co = checkout
df = diff
st = status
sa = stash
mt = mergetool
cp = cherry-pick
pl = pull --rebase
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
[mergetool "sourcetree"]
cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh
\"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
Ответы
Ответ 1
Как упоминалось выше, это было изменение поведения по умолчанию, введенное в Git 2.16.
Вы можете отключить постраничный вывод для git branch
по умолчанию с помощью pager.branch
конфигурации pager.branch
:
git config --global pager.branch false
Ответ 2
Как указывалось в других ответах, git по умолчанию подключается к пейджеру (по умолчанию less
) для большинства команд.
Важным моментом, однако, является то, что , когда переменная среды LESS не установлена, Git устанавливает для нее значение FRX, и следствием этого является то, что поведение, видимое пользователю, такое же, как если бы пейджер не использовался, когда вывод команды короткий (т.е. если у вас всего несколько ветвей). Смотрите человек меньше:
-F или --quit-if-one-screen
Вызывает автоматическое завершение меньше, если весь файл может отображаться на первом экране.
-R или - -R AW-CONTROL-CHARS
[...] escape-последовательности ANSI "color" выводятся в "сыром" виде.
-X или --no-init
Отключает отправку строк инициализации и деинициализации termcap на терминал. Это иногда желательно, если строка деинициализации делает что-то ненужное, например очистку экран.
Если вы получите описанное вами поведение, вам, скорее всего, будет задано $LESS
что-то другое, и его сброс (unset LESS
) избавит от проблемы, сохраняя поведение "пейджер" для длинного вывода. Кроме того, вы можете активировать поведение, сохраняя $LESS
как есть, добавив его в файл .gitconfig
:
[core]
pager = less -FRX
Если вам действительно не нравится пейджер, вы можете деактивировать его глобально или для каждой команды (см. другие ответы).
Ответ 3
Не аргументировать семантику, но поведение, которое вы получаете, является значением по умолчанию. Вот почему вы получаете его, когда не просите что-то другое. По умолчанию branch
(и множество других команд git) используют пейджер при отправке вывода на терминал.
Вы можете переопределить это значение по умолчанию, используя опцию --no-pager
git --no-pager branch
Или, если вы перенаправляете вывод в файл, git должен обнаружить, что он не пишет на терминал, и поэтому не должен использовать пейджер в любом случае. (С другой стороны, это предполагает использование сценария, и в этом случае вам следует использовать команду сантехника, например git for-each-ref
, в качестве git branch
.)
Ответ 4
это мерзкое поведение было все более и более раздражающим для меня тоже. Я получил мой список тегов less
когда просто хочу перечислить теги, например.
Можно также контролировать это поведение, изменив Git PAGER по умолчанию на cat
вместо less
. Я бы лучше прокрутил в iTerm, чем в редакторе. Мне нравится использовать редактор, когда я хочу.
Так:
git config --global core.pager cat
Я надеюсь, что это помогает.
Ответ 5
Для тех, кто хочет обновить их ~/.gitconfig
чтобы исправить это, это будет выглядеть так:
[pager]
branch = false
Ответ 6
Команда Git branch ведет себя как 'less'
Поскольку git по умолчанию открывает вывод в пейджере (по крайней мере, в Ubuntu) Принятый ответ полностью заменит пейджер, который вам может не понравиться, если ваш вывод очень длинный.
Я бы порекомендовал заменить пейджер на less
чтобы он не "прокручивал" выходные данные меньше, чем высота терминала.
git config --global --replace-all core.pager "less -F -X"
Ответ 7
Сделайте следующее:
[alias]
br = !git --no-pager branch
Ответ 8
https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables
GIT_PAGER управляет программой, используемой для отображения многостраничного вывода в командной строке. Если это не установлено, PAGER будет использоваться как запасной вариант.
Чтобы решить вашу проблему, вы можете отключить PAGER и GIT_PAGER в вашей оболочке.