Команда git branch ведет себя как "меньше"


когда я использую git branch команда для перечисления всех ветвей, я вижу вывод git branch | less.

команда git branch должен показывать список ветвей, например ls для файлов.

это выход, который я получаю:

как я получаю поведение по умолчанию git branch? Что вызывает постраничный вывод?

я использую ZSH с oh_my_zsh (ничего для Гита там), и мой .gitconfig похоже, это:

[user]
  email = myemail@mail.com
  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
4 81

4 ответа:

Как упоминалось выше, это было изменение поведения по умолчанию введено в Git 2.16.

вы можете включить постраничный вывод для git branch отступить по умолчанию с pager.branch config параметр:

git config --global pager.branch false

не спорить семантика, но поведение вы получаете и по умолчанию. Вот почему вы получаете его, когда не просите чего-то другого. По умолчанию branch (и многие другие команды git) используют пейджер при отправке вывода на терминал.

вы можете переопределить это значение по умолчанию с помощью --no-pager опции

git --no-pager branch

или если вы перенаправляете вывод в файл, git должен обнаружить, что он не записывает на терминал и поэтому не должен использовать пейджер в любом случае. (С другой стороны, это предполагает сценарий использования сценариев, и в этом случае вы должны рассмотреть возможность использования команды plumbing, такой как git for-each-ref вместо git branch.)

как указывали другие ответы, git по умолчанию передает себя в пейджер (less по умолчанию) для большинства команд.

важным моментом, однако, является то, что когда меньше переменная окружения не установлена, ГИТ устанавливает его включении компьютера, и следствием этого является то, что видимое пользователем поведение такое же, как если бы пейджер не использовался, когда вывод команды короткий (т. е. если у вас есть только несколько ветвей). Смотрите человек меньше:

-F или -- выйти-если-один-экран
Вызывает меньше для автоматического выхода, если весь файл может быть отображен на первом экране.

- R или -- RAW-CONTROL-CHARS
[...] ANSI" цветные "escape-последовательности выводятся в "сырой" форме.

- X или --no-init
Отключает отправку строк инициализации и деинициализации termcap на терминал. Это иногда желательно, если строка деинициализации делает что-то ненужное, например, очищает экран.

если вы получите поведение, которое вы описываете, вы, скорее всего,$LESS установите что-то еще, и сбросив его, вы избавитесь от проблемы, сохраняя поведение "пейджера" для длительного вывода. Кроме того, вы можете активировать поведение при сохранении $LESS как есть, добавив это в свой .gitconfig file:

[core]
    pager = less -FRX

Если вам действительно не нравится пейджер, вы можете отключить его глобально или по команде (см. другие ответы).

https://git-scm.com/book/gr/v2/Git-Internals-Environment-Variables

GIT_PAGER управляет программой, используемой для отображения многостраничного вывода командная строка. Если этот параметр не задан, пейджер будет использоваться в качестве резервного.

чтобы решить вашу проблему, вы можете отключить пейджер и GIT_PAGER в своей оболочке.