【问题标题】:Git tab completion stopped working on remote branchesGit选项卡完成停止在远程分支上工作
【发布时间】:2020-12-25 19:08:13
【问题描述】:

我已将 git 更新到其最新版本 (2.29.0) 并使用 ZSH 5.8。

我以前用git checkout remote_br<tab>在分支之间切换,以便在分支之间快速切换,即使分支只是一个远程的atm。我已经看到 git 对 switch/checkout recently 进行了很多更改,问题是我在远程分支上的自动完成功能不再起作用(使用 checkout 或 switch)。

我尝试将最新版本的 contrib/completion/git-completion.zsh 添加到我的 zsh 中,但我的问题仍然存在。我在这里错过了什么吗?

【问题讨论】:

  • 如您所见,完成脚本上出现了一系列小活动,以解决switch 命令等问题。我记得有一两个改变使 DWIM 完成也成为可选的。听起来它在您的手机中已关闭。我实际上并没有使用此功能,我不记得启用/禁用设置是什么。
  • 请注意,当您运行 git fetch 并选择一个新的远程跟踪名称(例如 origin/xyz-feature)时,您实际上根本没有(本地)分支名称 xyz-feature . switch 或 checkout 命令将根据需要从origin/xyz-feature创建您的xyz-feature,Git 将此称为“checkout DWIM”(按我的意思做)。
  • 之所以选择此选项是因为某些存储库有数百个名称相似的分支,因此如果您使用完成,并且有一个名为sanity 的本地分支例如,但是您的上游有 78 个名称都以 s 开头的分支,您不能只输入 s<tab>。关闭 DWIM 样式的完成,您可以只需键入 s<tab>。但在您的情况下,您希望它打开 on。无论如何,这可能是查看完成脚本的有用提示。
  • 我已经阅读了所有最近的更改日志,但我什么也没看到。在查看提交时,我认为它可能与以下内容有关:github.com/git/git/commit/… 但我没有看到问题。我检查了__git_checkout_default_dwim_mode,它按预期返回--dwim
  • 从 git 版本 2.30.0(2020 年 12 月 27 日发布)开始,这似乎已得到修复。我已经更新,它在 zsh 中对我来说可以正常工作。

标签: git zsh oh-my-zsh zsh-completion


【解决方案1】:

过去几个小时我一直在研究这个问题,并确定了回归。

回归发生在6880779

要临时解决此问题:将您的 git-completion.bash 文件(我的位于 /usr/local/share/zsh/site-functions/git-completion.bash)替换为 https://github.com/git/git/blob/688077910bdfbd502cb59c9c48a2af2c97d8b67b~1/contrib/completion/git-completion.bash

要真正解决这个问题,请支持我的 git PR 并帮助将其合并! (https://github.com/git/git/pull/902)

【讨论】:

  • 与@FelipeC 相同,它适用于本地分支,但不适用于远程分支。只要分支没有被提取,自动完成对我不起作用:/
  • 我在这里发布的版本适用于远程分支
  • 或者更好:只需使用 Zsh 的内置 Git 补全。它比 Git 附带的要好得多。
  • 这个补丁已经发送到 ML 并且已经排队了。无需发送 PR。 lore.kernel.org/git/…
【解决方案2】:

试试下面的补丁:

--- a/git-completion.zsh
+++ b/git-completion.zsh
@@ -97,6 +97,11 @@ __gitcomp_direct ()
        compadd -Q -S '' -- ${(f)1} && _ret=0
 }
 
+__gitcomp_direct_append ()
+{
+       __gitcomp_direct "$@"
+}
+
 __gitcomp_nl ()
 {
        emulate -L zsh

一般来说,最好将错误报告给git mailing list,但是,我是 zsh 代码的维护者,在我的 fork 中更新的代码:git-completion

【讨论】:

  • 它适用于本地分支,但不适用于远程分支。只要分支没有被提取,自动完成就不起作用。 (与您当前的主人测试:github.com/felipec/git-completion/blob/…
  • @FelipeC 我应该把我的PR 发给你吗?
  • 顺便说一句,您的建议与I did的建议非常相似
  • @RobinFrcd 它应该适用于两者。就像它在 Bash 中所做的那样。你有一个没有的测试用例吗?
  • 忘记编辑我的评论,现在一切正常,谢谢!
猜你喜欢
  • 2011-04-04
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2011-03-04
  • 2014-08-22
  • 2018-01-14
相关资源
最近更新 更多