Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git branch命令的行为类似于';减去';_Git_Terminal_Zsh_Git Branch_Oh My Zsh - Fatal编程技术网

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"

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

  • 在(默认配置的)bash和zsh之间,行为实际上是不同的。“问题”只在zsh下出现
  • 建议的解决方案将使
    git分支
    不总是使用寻呼机,这在有大量输出时是不需要的
  • 真正的原因是bash和zsh对LESS有不同的默认定义:bash不定义任何内容,而zsh将其定义为
    -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这是这里最优秀的答案,遗憾的是它的上升票太少了,因为我滚动了相当多的时间才找到它