当我使用git branch
命令列出所有分支时,我看到git branch | less
的输出。
命令git branch
应该显示分支列表,例如ls
对文件的分支。
这是我得到的输出:
我如何获得git branch
的默认行为?导致分页输出的原因是什么?
我正在使用ZSH oh_my_zsh
(Git中没有任何内容),我的.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
答案 0 :(得分:390)
如上所述,这是默认行为更改introduced in Git 2.16。
默认情况下,您可以使用pager.branch
config setting关闭git branch
的分页输出:
git config --global pager.branch false
答案 1 :(得分:25)
正如其他答案所指出的那样,对于大多数命令,git默认将自己管道化为寻呼机(默认为less
)。
重要的一点是,When the LESS environment variable is unset, Git sets it to FRX,结果是用户可见的行为与命令输出短时没有使用寻呼机的行为相同(即如果你只有少数分支机构)。见man less:
-F或--quit-if-one-screen
如果整个文件可以显示在第一个屏幕上,则会导致自动退出。-R或--RAW-CONTROL-CHARS
[...] ANSI“颜色”转义序列以“原始”形式输出。-X或--no-init
禁止将termcap初始化和取消初始化字符串发送到终端。如果是,这有时是可取的 deinitialization字符串做了一些不必要的事情,比如清除 屏幕。
如果你得到你描述的行为,你很可能将$LESS
设置为其他东西,并且取消设置它将解决问题,同时保持长传输的“寻呼机”行为。或者,您可以通过将此行为添加到$LESS
文件来激活行为,同时保持.gitconfig
:
[core]
pager = less -FRX
如果您真的不喜欢寻呼机,可以全局或按命令停用它(参见其他答案)。
答案 2 :(得分:17)
不要争论语义,但你得到的行为是默认的。这就是为什么当你不要求不同的东西时你得到它。默认情况下,branch
(和许多其他git命令)在向终端发送输出时使用寻呼机。
您可以使用--no-pager
选项
git --no-pager branch
或者,如果将输出重定向到文件,git应检测到它没有写入终端,因此不应使用寻呼机。 (另一方面,这表明脚本用例,在这种情况下,您应该考虑使用git for-each-ref
之类的管道命令优先于git branch
。)
答案 3 :(得分:16)
接受的答案似乎是错误的。有两个问题:
git branch
始终不使用寻呼机,这在输出很多时将是不希望的。真正的原因是bash和zsh关于LESS的默认定义不同:bash什么也没有定义,而zsh则将其定义为-R
。当我在zsh中执行unset LESS
时,一切恢复正常....
可能仍需要-R
行为。在这种情况下,您可以将以下指令添加到.zshrc中,以确保一切正常:
export LESS=-FRX
-F
“如果可以在第一个屏幕上显示整个文件,则可以减少自动退出的时间”。但是,-X
需要同时指定,否则当输出的屏幕数少于一屏时,将不会显示任何输出。
答案 4 :(得分:9)
这种git的行为对我也越来越烦人。
例如,当我只想列出标签时,我在less
中得到了标签列表。
也可以通过将默认的 Git PAGER 更改为cat
而不是less
来控制此行为。
我宁愿在iTerm中滚动而不是在编辑器中滚动。我想在需要时使用编辑器。
所以:
git config --global core.pager cat
希望对您有帮助。
答案 5 :(得分:5)
对于那些想要更新其~/.gitconfig
来解决此问题的人,它看起来像这样:
[pager]
branch = false
答案 6 :(得分:2)
Git分支命令的行为类似于“少”
因为默认情况下git在pager中打开输出(至少在ubuntu中) 接受的答案将完全替代寻呼机,如果您的输出很长,您可能会不喜欢它。
我建议用less
代替寻呼机,这样它就不会“滚动”输出小于终端机高度的东西。
git config --global --replace-all core.pager "less -F -X"
答案 7 :(得分:0)
https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables
GIT_PAGER控制用于显示多页输出的程序 命令行。如果未设置,则PAGER将用作后备。
要解决您的问题,您可以在shell中取消设置PAGER和GIT_PAGER。
答案 8 :(得分:-1)
执行以下操作:
[alias]
br = !git --no-pager branch