当我使用git branch命令列出所有分支时,我看到git branch | less的输出。

命令git分支应该显示一个分支列表,就像ls显示文件一样。

这是我得到的输出:

我如何得到git分支的默认行为?是什么导致了分页输出?

我的.gitconfig是这样的:

[user]
  email = myemail@mail.com
  name = Dennis H.
[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

当前回答

公认的答案似乎是错误的。有两个问题:

bash和zsh之间的行为实际上是不同的(默认配置)。“问题”只在zsh下显示。 建议的解决方案将使git分支不总是使用分页器,当有大量输出时,这将是不需要的。

真正的原因是bash和zsh对LESS有不同的默认定义:bash什么都不定义,而zsh将其定义为-R。当我在zsh中unset LESS时,一切都恢复正常....

-R行为可能仍然是需要的。在这种情况下,你可以添加以下指令到你的.zshrc,以保持一切正常工作:

export LESS=-FRX

-F '导致less自动退出,如果整个文件可以显示在第一个屏幕上'。但是,-X需要同时指定,否则当输出少于一屏时将不显示输出。

其他回答

公认的答案似乎是错误的。有两个问题:

bash和zsh之间的行为实际上是不同的(默认配置)。“问题”只在zsh下显示。 建议的解决方案将使git分支不总是使用分页器,当有大量输出时,这将是不需要的。

真正的原因是bash和zsh对LESS有不同的默认定义:bash什么都不定义,而zsh将其定义为-R。当我在zsh中unset LESS时,一切都恢复正常....

-R行为可能仍然是需要的。在这种情况下,你可以添加以下指令到你的.zshrc,以保持一切正常工作:

export LESS=-FRX

-F '导致less自动退出,如果整个文件可以显示在第一个屏幕上'。但是,-X需要同时指定,否则当输出少于一屏时将不显示输出。

正如其他回答指出的那样,对于大多数命令,Git默认将自己输送到分页器(默认情况下较少)。

但是,重要的一点是,当LESS环境变量未设置时,Git将其设置为FRX,其结果是用户可见的行为与当命令的输出很短时(即如果您只有几个分支)不使用寻呼机时相同。少见人:

-F或——quit-if-one-screen 如果整个文件可以显示在第一个屏幕上,则导致less自动退出。 -R或——RAW-CONTROL-CHARS […ANSI“颜色”转义序列以“原始”形式输出。 -X或——no-init 禁止将termcap初始化和反初始化字符串发送到终端。这有时是可取的,如果 去初始化字符串会做一些不必要的事情,比如清除 屏幕上。

如果您得到您所描述的行为,您很可能将$LESS设置为其他内容,并且取消设置它(取消设置LESS)将消除该问题,同时保持“寻呼机”行为用于长输出。或者,你也可以在保持$LESS不变的情况下激活for行为,在你的.gitconfig文件中添加:

[core]
    pager = less -FRX

如果您真的不喜欢寻呼机,您可以在全局或每个命令的基础上禁用它(参见其他答案)。

做以下几点:

[alias]
  br = !git --no-pager branch

这是我的工作(Windows下的Powershell)

$ git branch | echo

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

GIT_PAGER控制用于在上显示多页输出的程序 命令行。如果未设置该参数,则将使用PAGER作为备用。

要解决这个问题,可以在shell中取消设置PAGER和GIT_PAGER。