Команда 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

Ответ 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 в вашей оболочке.