提问人:DenicioCode 提问时间:1/19/2018 最后编辑:phuclvDenicioCode 更新时间:10/26/2023 访问量:87968
Git 分支命令的行为类似于“less”
Git branch command behaves like 'less'
问:
当我使用命令列出所有分支时,我看到 的输出。git branch
git branch | less
该命令应该显示分支列表,就像文件一样。git branch
ls
这是我得到的输出:
如何获取 的默认行为 ?什么原因导致分页输出?git branch
我的样子是这样的:.gitconfig
[user]
email = [email protected]
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
答:
https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables
GIT_PAGER 控制用于显示多页输出的程序 命令行。如果未设置,则 PAGER 将用作回退。
要解决您的问题,您可以在 shell 中取消设置 PAGER 和 GIT_PAGER。
评论
PAGER
GIT_PAGER
PAGER= git branch
git branch | cat
不是为了争论语义,但你得到的行为是默认的。这就是为什么当你不要求不同的东西时,你就会得到它。默认情况下,(以及许多其他 Git 命令)在向终端发送输出时使用寻呼机。branch
您可以使用以下选项覆盖此默认值:--no-pager
git --no-pager branch
或者,如果您将输出重定向到文件,Git 应该检测到它没有写入终端,因此无论如何都不应该使用寻呼机。(另一方面,这建议了一个脚本用例,在这种情况下,您应该考虑使用管道命令,例如优先于 。git for-each-ref
git branch
评论
git --no-pager branch
工程。但是这是如何设置的呢?只有环境变量设置为 。这不是默认行为。我所有的大学都有输出,作为列表打印到终端。PAGER
less
正如 Mark Adelsberger 的回答评论中提到的,这是 Git 2.16 中引入的默认行为更改。
默认情况下,您可以使用 pager.branch
配置设置关闭分页输出以进行回退:git branch
git config --global pager.branch false
评论
git branch
git branch > branches.txt
git branch | wc -l
man less
。less
--no-init --quit-if-one-screen
LESS
less
[pager] branch = false
export LESS = "--no-init --quit-if-one-screen -R"
正如其他答案所指出的,对于大多数命令,Git 默认将自身通过管道传输到寻呼机中(默认情况下)。less
不过,重要的一点是,当 LESS 环境变量未设置时,Git 会将其设置为 FRX,其结果是用户可见的行为与命令输出较短时未使用寻呼机的行为相同(即,如果您只有几个分支)。少看人:
-F 或 --quit-if-one-screen
如果整个文件可以显示在第一个屏幕上,则会导致 less 自动退出。-R 或 --RAW-CONTROL-CHARS
[...]ANSI“颜色”转义序列以“原始”形式输出。-X 或 --no-init
禁止将 termcap 初始化和取消初始化字符串发送到终端。如果 取消初始化字符串会做一些不必要的事情,比如清除 屏幕。
如果你得到了你所描述的行为,你很可能已经设置了其他东西,取消设置它()将消除这个问题,同时保持“寻呼机”行为的长输出。或者,您可以通过将以下内容添加到文件中来激活该行为,同时保持原样:$LESS
unset LESS
$LESS
.gitconfig
[core]
pager = less -FRX
如果你真的不喜欢寻呼机,你可以全局停用它,也可以按命令停用它(见其他答案)。
评论
pager = less -FR
X
git config --global core.pager "less -FRX"
对于那些想要更新以解决此问题的人,它看起来像这样:~/.gitconfig
[pager]
branch = false
评论
git config --list --show-origin
执行以下操作:
[alias]
br = !git --no-pager branch
这种 Git 行为对我来说也越来越烦人。
例如,当我只想列出标签时,我得到了我的标签列表。less
也可以通过将默认的 Git PAGER 更改为 而不是 来控制此行为。我宁愿在 iTerm 中滚动,也不愿在编辑器中滚动。我喜欢在需要时使用编辑器。cat
less
所以:
git config --global core.pager cat
评论
git log
蝙蝠
一只带翅膀的猫(1)克隆。一个小小的总结:对于短输出(适合一个屏幕),它的行为类似于 ,对于长输出(一个屏幕的大输出)。对我来说,这几乎是一个直截了当的解决方案。cat
less
cat
less
bat
公认的答案似乎是错误的。有两个问题:
- (默认配置的)bash 和 zsh 之间的行为实际上是不同的。“问题”仅在 zsh 下显示。
- 建议的解决方案将不总是使用寻呼机,当有大量输出时,这将是不需要的。
git branch
真正的原因是 bash 和 zsh 对 LESS 有不同的默认定义:bash 什么都不定义,而 zsh 将其定义为 .当我在 zsh 中做时,一切都恢复正常......-R
unset LESS
该行为可能仍是可取的。在这种情况下,您可以将以下指令添加到您的 .zshrc 中,以保持一切正常:-R
export LESS=-FRX
-F
“如果整个文件可以显示在第一个屏幕上,则会导致 less 自动退出”。但是,需要同时指定,否则当输出少于屏幕时,将不显示输出。-X
评论
-R
unset LESS
export LESS=-FRX
这对我有用(Windows 下的 Powershell)
$ git branch | echo
如果你只想看到你的分支(未格式化),你可以通过管道将 git branch 传递给 cat:
git branch | cat
评论