如何在没有来源的Git上使用zsh制表符补全?

JJD*_*JJD 8 git ubuntu zsh tab-completion oh-my-zsh

我使用的zshOH-MY-的zsh在Ubuntu 18.04.2。当前,Git安装在版本2.20.1中。

每当我想checkout从remote(origin)转到本地分支时,我都会尝试在shell中使用制表符补全,如下所示:

git checkout fea<TAB>
Run Code Online (Sandbox Code Playgroud)

制表符完成将导致:

git checkout origin/feature
Run Code Online (Sandbox Code Playgroud)

我实际上对制表符完成的期望是:

git checkout feature
Run Code Online (Sandbox Code Playgroud)

如何配置制表符完成以正确(?)完成远程分支-还是缺少某些内容?我的dotfile是公开的。


回复塔伦·拉尔瓦尼(Tarun Lalwani)评论:的输出git branch -a是:

开发
*客房服务
遥控器/起源/ HEAD->起源/开发
遥控器/起源/开发
遥控器/起源/主
遥控器/起源/释放
遥控器/起源/功能

Obs*_*ian 5

经过深入研究,发现git checkoutZSH下的完成并不是由oh-my-zsh完成的,而是由_gitshell设施提供的功能完成的。

\n\n

正如评论中所述,我无法重现您遇到的问题。一切似乎都按预期进行。尽管如此\xe2\x80\xa6

\n\n

查看以下文件:

\n\n
/usr/share/zsh/<5.x>/functions/_git\n
Run Code Online (Sandbox Code Playgroud)\n\n

我本地的zsh版本是5.2在第450行左右,您可以看到:

\n\n
/usr/share/zsh/<5.x>/functions/_git\n
Run Code Online (Sandbox Code Playgroud)\n\n

删除传递给的数组之一会_alternative更改在完成分支名称后向您提供的建议git checkout。特别是,删除$remote_branch_noprefix_arg会返回带有前缀的远程分支名称origin或其各自的远程存储库名称。

\n\n

因此,升级您的 shell 或降级到以前的版本可能是一个好主意。

\n\n

还有一些细节:

\n\n
    \n
  • 我看到您已经编辑了原始帖子,并且有充分的理由与;git push略有不同。git checkout
  • \n
  • 远程分支的同源本地分支可能不会强制存在:feature与 不同origin/feature,即使前一个分支存在,通常配置为跟踪后者;
  • \n
  • 默认情况下,如果本地分支尚不存在,并且没有传递显式选项,则签出feature将创建一个配置为跟踪远程分支的同名本地分支,然后切换到它,而签出origin/feature将使您处于分离状态模式,允许浏览此远程分支但直接在其之上提交。
  • \n
\n