git ls-remote的'pattern'的定义是什么?

soat7uwm  于 2023-03-06  发布在  Git
关注(0)|答案(2)|浏览(146)

git ls-remote采用什么类型的"模式"?
man git-ls-remote表示:

<refs>...
       When unspecified, all references, after filtering done with --heads
       and --tags, are shown. When <refs>... are specified, only references
       matching the given patterns are displayed.

它是一个POSIX shell glob,正则表达式,gitignore模式,...?

s3fp2yjn

s3fp2yjn1#

确实,ls-remote的文档没有说太多,但是你可以在其他页面找到这些信息,例如git tag -l的文档说:
模式是一个shell通配符(即,使用fnmatch(3)进行匹配)。
据我所知,git只支持basic glob syntax,但不支持FNM_EXTMATCH提供的“扩展模式”。
我认为过滤实际上是由wildmatch()实现的,因此其行为可能与标准的fnmatch不同。

4uqofj5v

4uqofj5v2#

注意Git 2.40(2023年第一季度)对git ls-remote的模式定义做了轻微的更新。
参见commit d9ec3b0commit baebde7(2023年2月10日)和Jeff King ( peff )
(由Junio C Hamano -- gitster --合并至commit 6aac634,2023年2月22日)

doc/ls-remote:澄清模式格式

签署人:杰夫·金
我们记录了您可以将"refs"指定给ls-remote,但是除了它们作为模式"匹配"之外,我们没有进一步解释。
因为这可以用很多方式来解释,让我们澄清一下,它们是尾部匹配的globs
同样,让我们使用单词"patterns"而不是"refs"(在这里和"-h"快速帮助中都是如此)来一致地指代它们,并且更明确地指出,只需要匹配一个模式(尽管已经有一个示例演示了这一点)。
git ls-remote现在在其手册页中包括:
[--symref] [<repository> [<patterns>...]]
git ls-remote现在在其手册页中包括:

<patterns>...

如果未指定,则显示使用--heads--tags过滤后的所有引用。
当指定<patterns>...时,仅显示与一个或多个给定模式匹配的参照。
每个模式都被解释为一个glob,它与ref的"tail"匹配,从ref的开头开始(因此像refs/heads/foo这样的全名匹配)或从斜杠分隔符开始(因此bar匹配refs/heads/bar,但不匹配refs/heads/foobar)。

相关问题