Git分支命令的行为类似于'less'

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

命令git branch应该显示分支列表,就像ls对文件所做的那样。

这是我得到的输出:

在此处输入图片描述

如何获取git branch的默认行为?是什么原因导致分页输出?

我的.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
75175 次浏览

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

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

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

不要争论语义学,而是你得到的默认行为。这就是为什么当你不要求不同的东西时你会得到它。默认情况下,branch(和许多其他Git命令)在向终端发送输出时使用寻呼机。

您可以使用--no-pager选项覆盖此默认值:

git --no-pager branch

或者,如果您将输出重定向到文件,Git应该检测到它没有写入终端,因此无论如何都不应该使用寻呼机。(另一方面,这建议使用脚本用例,在这种情况下,您应该考虑使用像git for-each-ref这样的管道命令而不是git branch。)

订阅关于Mark Adelsberger的评论中所述,这是默认行为更改在Git 2.16中引入

默认情况下,您可以使用pager.branch配置设置关闭git branch的分页输出:

git config --global pager.branch false

正如其他答案所指出的那样,对于大多数命令,Git默认将自己管道到寻呼机(默认为less)中。

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

-F或--退出单屏
如果整个文件可以显示在第一个屏幕上,则会导致更少的自动退出。

-R或--RAW-CONTROL-CHARS
[…]ANSI“颜色”转义序列以“原始”形式输出。

-X或--no-init
禁用向终端发送termCap初始化和反初始化字符串。如果 去初始化字符串做一些不必要的事情,比如清除 屏幕。

如果你得到了你描述的行为,你很可能已经将$LESS设置为其他值,并且取消设置它(unset LESS)将在保持长输出的“寻呼机”行为的同时摆脱问题。或者,你可以通过将其添加到你的.gitconfig文件中来激活保持$LESS原样的行为:

[core]
pager = less -FRX

如果你真的不喜欢寻呼机的东西,你可以全局或按命令停用它(参见其他答案)。

对于那些想要更新他们的~/.gitconfig来解决这个问题的人来说,它看起来像这样:

[pager]
branch = false

执行以下操作:

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

这种Git行为对我来说也越来越烦人。 例如,当我只想列出标签时,我在less中得到了我的标签列表。

也可以通过将默认的Git PAGER更改为cat而不是less来控制此行为。我宁愿在iTerm中滚动而不是在编辑器中滚动。我喜欢在需要时使用编辑器。

所以:

git config --global core.pager cat

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

  1. (默认配置的)bash和zsh之间的行为实际上是不同的。“问题”仅在zsh下显示。
  2. 建议的解决方案将使git branch不总是使用寻呼机,这在有很多输出时是不需要的。

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

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

export LESS=-FRX

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

这个工作对我来说(Windows下的Powershell)

$ git branch | echo