Git branch命令的行为类似于';减去';
当我使用Git branch命令的行为类似于';减去';,git,terminal,zsh,git-branch,oh-my-zsh,Git,Terminal,Zsh,Git Branch,Oh My Zsh,当我使用git branch命令列出所有分支时,我会看到git branch | less的输出 命令git branch应该显示分支列表,就像ls对文件所做的那样 这是我得到的输出: 如何获得git分支的默认行为?是什么导致分页输出 我将ZSH与oh_my_ZSH(其中Git没有任何内容)一起使用,我的.gitconfig如下所示: [user] email = myemail@mail.com name = Dennis Haegler [push] default = sim
git branch
命令列出所有分支时,我会看到git branch | less
的输出
命令git branch
应该显示分支列表,就像ls
对文件所做的那样
这是我得到的输出:
如何获得git分支的默认行为?是什么导致分页输出
我将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
[pager]
branch = false
GIT_PAGER控制用于在屏幕上显示多页输出的程序
命令行。如果未设置此选项,则寻呼机将用作回退
要解决您的问题,您可以在shell中取消设置PAGER和GIT_PAGER。不争论语义,但您得到的行为是默认行为。这就是为什么当你不要求不同的东西时你会得到它。默认情况下,
branch
(以及许多其他Git命令)在向终端发送输出时使用寻呼机
git config --global --replace-all core.pager "less -F -X"
您可以使用--no pager
选项覆盖此默认设置:
git --no-pager branch
或者,如果您将输出重定向到一个文件,Git应该检测到它没有写入终端,因此无论如何都不应该使用寻呼机。(另一方面,这意味着脚本用例,在这种情况下,您应该考虑使用管道命令,例如“代码> Git对于每个REF > >优先于<代码> Git分支< /C> >)< P>,这是一个默认的行为改变。
默认情况下,您可以使用以下选项关闭git分支的分页输出:
git config--全局分页器.branch错误
正如其他答案所指出的,对于大多数命令,Git默认将自己管道化到寻呼机中(less
)
然而,重要的一点是,结果是用户可见行为与命令输出较短时(即,如果只有很少的分支)未使用寻呼机时相同。见:
-F或--如果有一个屏幕,则退出如果整个文件可以在第一个屏幕上显示,则会导致less自动退出 -R或--RAW-CONTROL-CHARS
[…]ANSI“颜色”转义序列以“原始”形式输出 -X或--no init
禁止向终端发送termcap初始化和反初始化字符串。如果 取消初始化字符串会执行一些不必要的操作,例如清除 屏幕 如果您获得了所描述的行为,则很可能已将
$LESS
设置为其他内容,取消设置(unset LESS
)将消除该问题,同时保持“寻呼机”行为的长时间输出。或者,您可以通过将其添加到.gitconfig
文件来激活的行为,同时保持$LESS
不变:
[core]
pager = less -FRX
如果你真的不喜欢寻呼机,你可以在全局范围内或在每个命令的基础上停用它(参见其他答案)。对于那些想要更新其
~/.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
[pager]
branch = false
请执行以下操作:
[alias]
br = !git --no-pager branch
这种愚蠢的行为对我来说也越来越烦人了。 例如,当我只想列出标签时,我在
less
中得到了我的标签列表
也可以通过将默认的Git寻呼机更改为cat
,而不是less
,来控制这种行为。我宁愿在iTerm中滚动,也不愿在编辑器中滚动。我喜欢在需要的时候使用编辑器
因此:
git config--global core.pager cat
Git branch命令的行为类似于“less”
因为Git默认在pager中打开输出(至少在Ubuntu中)。接受的答案将完全取代寻呼机,如果git命令输出很长,您可能不喜欢它
我建议将寻呼机更换为less
,这样它的“滚动”输出就不会小于终端的高度
git config --global --replace-all core.pager "less -F -X"
公认的答案似乎是错误的。有两个问题:
git分支
不总是使用寻呼机,这在有大量输出时是不需要的-R
。当我在zsh中执行unset LESS
时,一切都会恢复正常
-R
行为仍然是需要的。在这种情况下,您可以将以下说明添加到.zshrc中,以保持一切正常工作:
export LESS=-FRX
-F
“如果整个文件可以在第一个屏幕上显示,则会导致less自动退出”。但是,需要同时指定-X
,否则当输出少于一个屏幕时,将不会显示任何输出。取消设置寻呼机
(GIT\u寻呼机
已取消设置)问题仍然存在。是否有任何位置我必须检查此env vars?@DenniJensen您可以在命令上设置寻呼机,如pager=git branch
(等号后面有一个空格,前面没有空格,与所写的完全相同)。不知道它是否比例如,git分支| cat
git更好——没有寻呼机分支
工作。但是这套怎么样?只有PAGER
环境变量设置为less
。这不是默认行为。我所有的大学都有一个输出列表,打印到终端上。你使用的是哪个版本的git?您的同事使用的是哪一个?2.16.0!这是这个版本中git引入的一个特性吗?是的,它现在是默认的。我旁边的学院使用的是同一个版本,没有这个问题:)thx@mark这是这里最优秀的答案,遗憾的是它的上升票太少了,因为我滚动了相当多的时间才找到它