多个起始路径
在本页面中,您将学到:
-
如何使用
start_paths
键指定单个内容源url
的分支的多个起始路径。 -
start_paths
键支持哪些用于匹配目录的模式。 -
如何排除先前模式匹配的目录。
start_paths键
start_paths
键允许您为存储库的单个引用指定多个内容源根。换句话说,您可以将多个组件版本、组件或分布式组件(每个都有自己的antora.yml文件)放在存储库的单个分支中,然后使用相同的内容源条目引用所有这些内容源根。当您以这种方式组织内容时,此功能有潜力大大减少播放书中内容源的冗长性。
与start_path键的关系
start_path键只允许您在播放书中为给定内容源指定单个路径。相比之下,start_paths
键允许您指定多个路径。这些多个路径甚至可以进一步使用通配符、排除、大括号、交替、范围和重复模式进行合并。Antora将模式解析为一个或多个固定路径。
start_paths
键与start_path
键是互斥的。如果内容源上同时存在start_path
和start_paths
键,则只使用start_paths
键。
与git引用的关系
与单一起始路径一样,起始路径会按git引用(即分支、标签和工作树)进行搜索。这意味着每个引用的每个起始路径都必须找到一个组件版本描述符。
通常,在使用多个起始路径时,您可能只会使用单个引用(例如main
)。如果在此场景中使用多个引用,假设是每个引用共享相同的布局。
用例
多个起始路径主要设计用于满足两种用例:
-
使用文件夹而不是分支进行版本控制的文档。
-
在单个存储库分支中为多个产品提供文档(例如,单体存储库)。
将组件版本存储为文件夹
您可以使用start_paths
将组件的所有版本存储在单个存储库分支中,而不是使用多个分支。尽管您可能会错过版本控制系统的一些优势,但这种安排可以使频繁更新多个版本文档的撰写人员更容易。
在这种情况下,您将为branches
键提供单个值,并使用start_paths
键告诉Antora在分支中使用哪些目录作为内容根。如果版本文件夹的命名方式一致,那么使用模式进行匹配就变得容易。
以下是一个使用文件夹存储文档版本的存储库布局示例:
📒 repository 📂 docs 📂 v1.0 📄 antora.yml 📂 v1.1 📄 antora.yml 📂 v2.0 📄 antora.yml
将组件存储为文件夹
您可以进一步将所有组件存储在单个存储库分支中,而不是使用多个存储库。如果这些组件有版本,您可能会使用子文件夹来存储版本。如果所有文档由同一团队或个人维护,并且git的分布性成为障碍,那么这种安排效果最佳。这也可能用于单体存储库,其中多个产品的源代码存储在同一个存储库中。Antora可以在该结构中的任何位置发现文档。
在这种情况下,您再次为branches
键提供单个值,并使用start_paths
键告诉Antora在分支中使用哪些目录作为内容根。只是这一次,内容源根将匹配不同的组件(可能还包括版本),而不仅仅是单个组件的版本。
以下是一个使用文件夹存储组件的存储库布局示例:
📒 repository 📂 product-a 📂 docs 📄 antora.yml 📂 product-b 📂 docs 📄 antora.yml 📂 product-c 📂 docs 📄 antora.yml
当然,存储库可能还有许多与文档无关的其他文件和文件夹。
精确路径
如果您只有几个路径要注册,您可能会发现使用精确路径模式是合适的。
content:
sources:
- url: https://github.com/org/repo1
start_paths: docs (1)
- url: https://github.com/org/repo2
start_paths: docs, more-docs (2)
- url: https://github.com/org/repo3
start_paths: [docs, more-docs] (3)
- url: https://github.com/org/repo4
start_paths:
- docs (4)
- more-docs
1 | 单个路径(等同于使用start_path )。 |
2 | 逗号分隔的精确路径值列表。 |
3 | 单行上的数组,由方括号([] )分隔。 |
4 | 多行上的数组,每行由前导- 分隔。 |
路径通配
除了在精确路径中描述的方法之外,您还可以使用许多(但不是全部)基本和高级路径通配功能来实现模式匹配。支持各种通配符、大括号和否定模式的组合。Antora使用这些通配模式来解析确切路径以读取内容。
通配限制
以下限制适用于Antora如何根据支持的基本和高级通配规则实现路径通配:
-
表达式中的通配符仅匹配目录,而不是文件。例如,像
product-a/docs/*/index.adoc
这样的表达式不受支持。 -
大括号表达式必须至少有两个条目,即使存在通配符。例如,
docs/product-{a*,b}
被识别为大括号表达式,但docs/product-{a*}
不是。 -
在包含通配符的段后面,单个大括号表达式匹配多个字符时不起作用。例如,
*/v{0..99}
匹配起始路径product-a/v2但不匹配product-a/v99。而应使用重复操作,例如*/v+({0..9})
,或为每个长度排列使用嵌套大括号表达式,例如*/v{{1..9},{1..9}{0..9}}
。 -
不支持双星号模式,例如
**/docs
。通配符仅匹配层次结构中的单个级别。
通配符
通配符匹配可减少您需要分配给start_paths
键的值的数量。例如,如果您在一个分支中存储多个组件,您可以将它们全部列在一个逗号分隔的列表中,如示例2中所示。
content:
sources:
- url: https://github.com/org/repo1
branches: main
start_paths: docs/product-a, docs/product-b, docs/product-c
或者,如示例3所示,您可以使用通配符段并减少您需要声明的值的数量。
content:
sources:
- url: https://github.com/org/repo1
branches: main
start_paths: docs/product-*
通配符匹配提供了在添加新内容源根时注册的可能性,只要保持模式一致即可。
大括号
大括号表达式可以指定由逗号分隔的项目的显式列表以扩展(docs/product-{a,b,c,f}
)或要扩展的项目范围(docs/product-{a..f}
)。大括号表达式不能仅包含一个项目,即使该项目包含通配符(例如,docs/product-{a}
和docs/product-{a*}
都不是大括号表达式)。
大括号表达式可以嵌套(例如,docs-*/v{{1..9},{1..9}{0..9}
匹配名称为docs-*的根文件夹中的v1到v99子文件夹)。在这种情况下,将测试每个嵌套大括号表达式的每个排列。
当您在start_paths
值中使用大括号时,扩展时大括号内的所有条目必须存在(除非该段前面有通配符段)。
如果您将docs/product-{a,b}
指定为start_paths
值,则存储库中必须存在以下路径:
-
docs/product-a
-
docs/product-b
您可以在大括号表达式之前的文件路径中使用前缀,以简化Antora在表达式中检查的内容。
content:
sources:
- url: https://github.com/org/repo1
branches: main
start_paths: docs/v{1..9}
您还可以在大括号表达式中使用通配符来帮助扩展值。
content:
sources:
- url: https://github.com/org/repo1
branches: main
start_paths: docs/product-v{1*,2*}
示例5中的start_paths
模式将匹配以下路径:
-
docs/product-v1.1
-
docs/product-v1.2
-
docs/product-v1.2.1
-
docs/product-v2.0
-
docs/product-v2.1.1
忽略的目录
默认情况下,隐藏目录(即以.
开头的目录)会被忽略。要在start_paths
路径通配模式中包含它们,可以在模式中使用.*
。例如,使用docs/.*-{a,b}
来包含所有带有后缀-a
或-b
的隐藏目录。
可选匹配
跟随通配符段的非通配符段被视为可选的。这个例外旨在简化目录匹配逻辑。
例如,docs/product-*/client
将匹配product-a/client,但如果product-b不包含client文件夹,则会忽略它。
另一个有效的例子是docs/product/*/client
,其中*
代表不同版本目录(v1.0、v1.1等)的客户端文档。如果某个版本目录中不存在client文件夹,则Antora会从验证的角度忽略它。
如果文件路径模式的最后一个段包含未匹配的大括号模式,Antora会将其视为可选的验证。
例如,docs/product-*/{client,b2b}
如果docs/product-a/b2b不存在,验证不会失败。