git checkout出现zsh: no matches found错误提示。

6

我的同事创建了一个分支,我正在尝试切换到该分支。

git checkout hisName/branchNameWithAHash#Inside

终端会返回:

zsh: no matches found: hisName/branchNameWithAHash#Inside

如果我运行git branch -r命令,我可以看到远程分支确实存在:

origin/HEAD -> origin/master
  origin/hisName/branchNameWithAHash#Inside
  origin/master

我为什么会收到“未找到匹配项”的提示?


1
请返回翻译后的文本:https://dev59.com/e2jWa4cB1Zd3GeqPnyUz#13783754,位于https://stackoverflow.com/search?q=%5Bzsh%5D+hash+symbol - phd
1
这纯粹是一个zsh问题,与Git无关。 - torek
@phd:在我看来,“模式删除”无法解释这个问题,因为我们不在${....}参数扩展内部,其中#确实具有特殊含义。 - user1934428
@RaphaelPinel:无法重现您的问题(使用zsh 5.8)。当您执行echo而不是git checkout时,是否会出现相同的错误?您的zsh版本是多少? - user1934428
@user1934428 我也有 zsh 5.8,如果我尝试 echo echo stringwithhash#,我也会得到相同的错误信息“no matches found”。我会得到 zsh: no matches found: stringwithhash# - Raphael Pinel
2个回答

11

原来,如果分支名包含像井号 # 这样的特殊字符,我需要在其周围加上引号。

使用 git checkout 'hisName/branchNameWithAHash#Inside' 现在可以得到:

Branch 'grzegorz/configureAWSAmplify_#PROAP-320' set up to track remote branch 'hisName/branchNameWithAHash#Inside' from 'origin'.
Switched to a new branch 'hisName/branchNameWithAHash#Inside'

我只测试了 '单引号',但我认为 "双引号" 也应该可以工作。

感谢 @user1934428 的评论和链接 @phd,似乎这是我的 zsh 配置问题。 输入 unsetopt EXTENDED_GLOB 解决了这个问题。

现在,如果我输入 echo stringwithhash# ,我会得到 stringwithhash#,而之前是 zsh:找不到匹配项:stringwithhash#


当然,引用有帮助,但这并不能解释为什么在您的具体情况下需要引号。根据您的设置,# 可能会引入注释,也可能只是一个普通字符。# 在 globbing 标志中得到特殊处理,但在这种情况下,应该在其周围加上括号,例如 (#q:.....)。即使如此,您仍需要显式地启用 _扩展 globbing_。 - user1934428
啊,extended_glob 就是罪魁祸首!一开始我读了你的帖子后也认为你已启用了它,但在看了手册之后没有发现它会影响你示例中的字符串。事实上,我现在重新阅读 zshexpn 手册时也找不到相关信息。你呢?如果没有的话,或许你可以提一个新问题,询问在你的模式中 # 和扩展 globbing 有何关系。 - user1934428
@user1934428 我不是一个高级的zsh用户,从未打开过手册,也不记得曾经激活过extended_glob,所以它一定是默认存在的。最近升级到Big Sur,不知道是否有关。 - Raphael Pinel
"extended_glob" 默认关闭。您必须在其中一个启动文件中打开它。苹果可能在其系统范围的启动文件中设置了此设置,但我认为这种可能性非常小。无论如何,您可以通过运行“zsh -xl”并分析输出来研究此问题,以确定此选项的设置位置。也许还进行了其他一些不需要的设置,因此出于这个原因检查会很有用。 - user1934428
顺便说一句,我开始怀疑这可能是zsh中的一个错误。即使man页面也没有提到它,但我找到的扩展zsh globbing教程页面中似乎也没有人知道这个功能。顺便说一下,关于扩展glob的相当好的概述在这里 - user1934428

1

我在macOS上添加helm repo时遇到了类似的错误,如下所示:

helm repo add chart-alias-name git+ssh://git@github.com/user/repo-name@chart/path?ref=ref-tag

> zsh: no matches found: git+ssh://git@github.com/user/repo-name@chart/path?ref=ref-tag

我已经通过在完整的git URL周围添加引号来解决了问题,如下所示:

helm repo add chart-alias-name "git+ssh://git@github.com/user/repo-name@chart/path?ref=ref-tag"

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