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模式,...?
2条答案
按热度按时间s3fp2yjn1#
确实,
ls-remote
的文档没有说太多,但是你可以在其他页面找到这些信息,例如git tag -l
的文档说:模式是一个shell通配符(即,使用fnmatch(3)进行匹配)。
据我所知,git只支持basic glob syntax,但不支持
FNM_EXTMATCH
提供的“扩展模式”。我认为过滤实际上是由
wildmatch()
实现的,因此其行为可能与标准的fnmatch
不同。4uqofj5v2#
注意Git 2.40(2023年第一季度)对
git ls-remote
的模式定义做了轻微的更新。参见commit d9ec3b0、commit 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
)。