Glob通配符¶
glob 模式是一种文本表达式,它使用大多数命令行用户熟悉的通配符来匹配一个或多个文件名。例如,*
是匹配任何名称的 glob, Readme.txt
是匹配一个名为 Readme.txt
文件的 glob。
对于 VisionByte 的 glob 而言,完整路径名只是一个字符串,并且 glob 不会对名称的目录部分应用任何特殊含义。
因此,glob的 *
匹配任何名称,包括任何目录前缀,并匹配具有一个或多个目录组件 */*
的名称。
尽管 glob 和 正则表达式(RE) 使用一些相同的特殊字符来实现类似的目的,但不能将其混淆。 它们不是完全兼容 的模式匹配语言。VisionByte 在将文件名与本文档中描述的设置进行匹配时使用 glob,而不是 RE。
VisonByte 的 *-
glob 设置包含一个或多个模式,以使 VisonByte 对匹配的命名文件进行特殊处理。某些命令的选项和某些 VisonByte UI 网页的查询参数也接受 glob 模式。
为了保持一致性, empty-dirs
即使设置不作为 glob 应用,也会将其解析 为 glob,因为它允许应用相同的语法规则。
VisonByte 还接受命令中的 glob,这种处理可能会与您的操作系统的命令 shell 或其 C 运行时系统交互,因为它们可能有自己的 glob 模式处理。我们将在下面详细介绍此类交互。
句法¶
当 VisionByte 接受 glob 模式时,它通常会接受以空格或 ,
分隔的单个模式列表。
解析器允许模式中出现空格和逗号,方法是用单引号或双引号将整个模式括起来。内部引号按字面意思处理。此外,以引号开头的模式在第一次出现相同标记时结束, 而不是在空格或逗号处结束。因此,如下所示:
"foo bar" qux
当列表中的任何模式匹配时,列表就会与文件匹配。
模式必须使用并匹配整个文件名才能成功。部分匹配将导致匹配失败。
glob 模式中的大多数字符都占用文件名的单个字符,并且必须完全匹配。例如,glob 中的 “a” 只匹配文件名中的字母 “a” ,除非它位于特殊字符序列内。
其他字符具有特殊含义,它们可能包括其他普通字符以赋予它们特殊含义:
通配符 |
说明 |
---|---|
|
匹配零个或多个字符的任意序列
|
|
匹配任意一个字符
|
|
匹配所含字符列表中的一个字符
|
|
匹配不包含在列表中的一个字符
|
这些特殊字符和序列可以匹配 /
目录分隔符以及 .
隐藏文件或目录名称中的首字母。这是因为 VisionByte 文件名存储为完整路径名。
上面的括号表达式解释:
可以使用指定字符范围 -
,因此 [a-f]
与 [abcdef]
匹配的字符完全相同。范围反映 Unicode 代码点,没有任何特定于语言环境的排序序列。
请注意,必须指定从低值到高值的范围:[z-a] 根本不匹配任何字符,从而阻止整个 glob 匹配。
一些字符列表的示例:
通配符 |
说明 |
---|---|
|
匹配a、b、c、d中任意一个
|
|
匹配排除a、b、c、d
|
|
匹配一个十六进制数字
|
|
匹配
a 或 - |
|
匹配
] 或 [ |
|
匹配除
] 字符的一个字符 |
|
匹配
] 或 ^ |
|
匹配除
- 字符的一个字符 |
空格是指特定的 ASCII 字符 TAB、LF、VT、FF、CR 和 SPACE。请注意,这不包括 Unicode 中提供的许多其他空格字符,例如 U+00A0、NO-BREAK SPACE。
因为 LF 和 CR 都是空格,并且列表中的每个 glob 的前导和尾随空格都被删除,所以当列表存储在文件中时,glob 列表可能会被分成 glob 之间的行,就像版本化设置一样。
请注意, “” 和 ‘’ 是 ASCII 直引号字符,而不是 Unicode 中提供的任何其他引号,更不是工作人员和文字处理器首选的 {}。
文件匹配¶
在与 glob 模式进行比较之前,每个文件名都应该先转换为规范形式:
所有目录分隔符都应为
/
列表中所有具体的文件名都是基于工作副本根目录的相对路径
文件名区分大小写
glob 必须与整个规范文件名匹配才被视为匹配。
这样做的目的是让每个特定文件的名称尽可能简单,并且无论您在哪个平台上运行 VisionByte,该名称都是相同的。当您从多个平台克隆仓库并在版本设置中有 glob 时,这一点很重要:您希望这些设置在任何地方都以相同的方式解释。
但是请注意,无论主机平台和文件系统如何,VisionByte 中的所有 glob 匹配都是区分大小写的。POSIX 平台上文件名通常区分大小写,但是大多数 Windows 文件系统都保留大小写但不区分大小写,
也就是说,在 Windows 上名称为 ReadMe
和 README
通常是同一文件的名称。在其他情况下也是如此,例如默认情况下在 macOS 文件系统上以及在非 Windows 系统上运行的 Windows 文件系统的文件系统驱动程序中。
(例如 Linux 上的 exfat。)因此,需要编写 VisionByte glob 模式以匹配签入仓库的文件的名称。
文件匹配的一些示例:
通配符 |
说明 |
---|---|
|
README 仅匹配树根目录中的文件。它不匹配名为 src/README 的文件,因为该文件不包含任何匹配 src/ 部分的字符。 |
|
匹配
src/README 。与 Unix 文件通配符不同,它还匹配 src/library/README 。但是它不匹配 README 作为树根目录中的文件,只匹配 README 作为子目录的文件。 |
|
匹配树根目录中的
src/README 文件以及树根目录下的 README 文件。以及 foo/bar/README 或树中任何其他名为 README 的文件,包括 A-DIFFERENT-README 和 src/DO-NOT-README 文件,以及任何其他文件名以 README 结尾的文件。 |
|
在 Windows 上匹配
srcREADME ,因为在匹配 golb 之前,所有目录分隔符都被重写为规范名称 / ,这使得编写在 Unix 和 Windows 上都能工作的 globs 变得容易得多。 |
|
匹配树根中或任意深度的每个 C 源文件或头文件。同样,这与 Unix 文件通配符和 Windows 通配符(故意)不同。
|
使用 glob
VisionByte 版本控制系统中许多命令会有 glob 设置的命令,如果这些命令使用 glob 模式进行本地设置,则可以部分或者全部覆盖上述忽略文件的 全局设置 。这些选项通常以它们覆盖的设置命名,例如 --ignore
选项覆盖 ignore-glob 文件里的忽略设置。这些命令是:
命令 tarball 和 zip 会生成特定签入的压缩档案。它们可能通过指定 glob 模式的选项进一步限制,这些模式命名要包含或忽略的文件,而不是存档整个签入。
通过 Web 服务器实现或支持的 http 、doc:cgi 、 server 和 ui 命令提供了一种机制来命名一些文件,以便与静态内容一起提供服务,其中 glob 模式列表指定可以提供哪些内容。