Git远程分支的选项卡自动补全无法使用

8
我已将git更新至最新版本(2.29.0),并使用ZSH 5.8。 我曾经使用git checkout remote_br<tab>来快速切换分支,即使该分支目前只是远程分支。 我看到git在最近关于switch/checkout方面进行了很多更改recently,但我的远程分支自动完成不再起作用(无论是使用checkout还是switch)。 我尝试将contrib/completion/git-completion.zsh的最新版本添加到我的zsh中,但问题仍然存在。 我是否漏掉了某些东西?

正如您所见,完成脚本方面已经有了一些小小的活动,以解决 switch 命令等问题。我记得还有一些更改使 DWIM 完成变成可选项。听起来在你的电脑上这个功能被关闭了。实际上我并不使用这个功能,也不记得开启/关闭设置是什么了。 - torek
请注意,当您运行git fetch并获取了一个新的远程跟踪名称,例如origin/xyz-feature时,您实际上根本没有一个名为xyz-feature的(本地)分支名称。切换或检出命令将根据需要从origin/xyz-feature创建您的xyz-feature,Git将其称为“checkout DWIM”(Do What I Mean)。 - torek
将此设置为可选项的原因是,某些存储库具有数百个名称类似的分支。如果您使用自动完成,并且本地分支名为“sanity”,但上游有78个名称都以s开头的分支,则无法仅键入s<tab>。关闭DWIM样式自动完成后,您可以只键入s<tab>。但在您的情况下,您希望它打开。这可能是查看完成脚本时有用的提示。 - torek
我已经阅读了所有最近的更改日志,但没有发现任何问题。当查看提交时,我认为可能与以下内容有关:https://github.com/git/git/commit/68d97c7fdd5bbfd87b2e0b14ddfcd2b1825b2059,但我没有看到问题。我已检查了`__git_checkout_default_dwim_mode`,它按预期返回了`--dwim`。 - RobinFrcd
1
截至Git版本2.30.0(于2020年12月27日发布),这个问题似乎已经得到了修复。我已经进行了更新,在zsh中它正常工作。 - rocksteady
显示剩余2条评论
2个回答

3

和 @FelipeC 一样,它在本地分支上可以工作但是在远程分支上不行。只要该分支没有被获取,自动完成对我来说就无法工作 :/ - RobinFrcd
我在这里发布的版本适用于远程分支。 - Max Coplan
或者更好的方法是:只需使用Zsh内置的Git自动补全功能。它比Git附带的那个要好得多。 - Marlon Richert
1
这个补丁已经被发送到 ML 并且已经排队了。不需要再发送 PR。 https://lore.kernel.org/git/20201028020712.442623-14-felipe.contreras@gmail.com/ - FelipeC

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邮件列表,但是,我是zsh代码的维护者,在我的分支中更新得更及时:git-completion


它在本地分支上运行正常,但在远程分支上不起作用。只要该分支未被获取,自动完成就无法工作。(使用您当前的主分支进行测试:https://github.com/felipec/git-completion/blob/282bb9bc13b926f5e6fbbc0966570220a63f37ad/git-completion.bash) - RobinFrcd
@FelipeC 我应该把我的PR直接提交给您吗? - Max Coplan
顺便说一句,你的建议与我所做的非常相似(链接:https://github.com/git/git/pull/902/files#diff-ac06d8a41d816b7182a4755e4258784c81b9b151bb5f6eabb32bc6465b419486R834) - Max Coplan
@RobinFrcd 它应该在两者上都能工作。就像在Bash中一样。你有一个测试用例它不能工作吗? - FelipeC
1
忘记编辑我的评论了,现在一切都按预期工作了,谢谢! - RobinFrcd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接