多个起始路径

在本页面中,您将学到:

  • 如何使用start_paths键指定单个内容源url的分支的多个起始路径。

  • start_paths键支持哪些用于匹配目录的模式。

  • 如何排除先前模式匹配的目录。

start_paths键

start_paths键允许您为存储库的单个引用指定多个内容源根。换句话说,您可以将多个组件版本、组件或分布式组件(每个都有自己的antora.yml文件)放在存储库的单个分支中,然后使用相同的内容源条目引用所有这些内容源根。当您以这种方式组织内容时,此功能有潜力大大减少播放书中内容源的冗长性。

与start_path键的关系

start_path键只允许您在播放书中为给定内容源指定单个路径。相比之下,start_paths键允许您指定多个路径。这些多个路径甚至可以进一步使用通配符、排除、大括号、交替、范围和重复模式进行合并。Antora将模式解析为一个或多个固定路径。

start_paths键与start_path键是互斥的。如果内容源上同时存在start_pathstart_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

当然,存储库可能还有许多与文档无关的其他文件和文件夹。

精确路径

如果您只有几个路径要注册,您可能会发现使用精确路径模式是合适的。

示例1. antora-playbook.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中所示。

示例2. antora-playbook.yml
content:
  sources:
  - url: https://github.com/org/repo1
    branches: main
    start_paths: docs/product-a, docs/product-b, docs/product-c

或者,如示例3所示,您可以使用通配符段并减少您需要声明的值的数量。

示例3. antora-playbook.yml
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在表达式中检查的内容。

示例4. antora-playbook.yml
content:
  sources:
  - url: https://github.com/org/repo1
    branches: main
    start_paths: docs/v{1..9}

您还可以在大括号表达式中使用通配符来帮助扩展值。

示例5. antora-playbook.yml
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

否定通配

使用否定模式来排除先前匹配的模式。如果您想匹配除了符合特定模式的所有目录之外的所有目录,则此方法很有用。

示例6. antora-playbook.yml
content:
  sources:
  - url: https://github.com/org/repo1
    start_paths:
    - docs/user/*
    - docs/dev/*
    - !**/*-beta.* (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不存在,验证不会失败。