注册表参考

概述

本文介绍每种注册表的实现详细信息。 具体而言,此文件涉及每种注册表的建议布局及其各自 版本数据库的预期内容。

注意

本文包含有关如何实现自定义注册表的信息。 有关在项目中使用自定义注册表的信息,请参阅 使用注册表 一文。

Git 注册表

Git 注册表中的基线文件布局

顶级字段

baseine.json 文件中的顶级对象是字典,此字典中的每个键都是一个名为基线 。 由于 Git 注册表的实现详细信息,必须存在名为“default”的 命名基线,并且它包含注册表中所有端口到其基线版本的映射。

名字 类型 描述
default BaselineObject Git 注册表所需的默认基线。
命名基线 BaselineObject 其他基线。 字段名称对应于基线名称。

BaselineObject

基线对象是字典,每个键对应于注册表中的端口名称,其值是最新版本的端口。

名字 类型 描述
端口名称 BaselineVersionObject 端口名称到其最新版本的映射

BaselineVersionObject

名字 类型 描述
baseline 字符串 与注册表中端口的最新可用版本对应的字符串。
port-version 整数 对应于注册表中端口的最新端口版本的整数

Git 注册表中 baseline.json 文件的示例

在版本 1.0.0#1包含名为 foo 的单个端口的注册表中,baseline.json 文件内容应为:

{
  "default": {
    "foo": { 
      "baseline": "1.0.0", 
      "port-version": 1
    }
  }
}

Git 注册表中的版本文件布局

versions 目录包含注册表中包含的包版本的所有信息,以及从存储库历史记录中检索这些版本的方法。

顶级字段

名字 类型 描述
versions VersionObject[] 版本对象的数组。 包含注册表历史记录中每个端口版本的条目。

VersionObject

名字 类型 描述
git-tree 字符串 用于检索端口内容的 git 树 SHA
version
version-semver
version-date
version-string
字符串 上游版本信息
端口版本 整数 端口文件修订

Git 注册表版本文件的示例

{
  "versions": [
    {
      "git-tree": "963060040c3ca463d17136e39c7317efb15eb6a5",
      "version": "1.2.0",
      "port-version": 0
    },
    {
      "git-tree": "548c90710d59c174aa9ab10a24deb69f1d75ff8f",
      "version": "1.1.0",
      "port-version": 0
    },
    {
      "git-tree": "67d60699c271b7716279fdea5a5c6543929eb90e",
      "version": "1.0.0",
      "port-version": 0
    }
  ]
}

获取 git-tree SHA

vcpkg 使用 Git 的功能检索其提交历史记录中包含的端口的特定版本。 使用的方法是从存储库中检索在端口的版本文件中指定的 git-tree 对象。

Git 注册表中的每个端口目录都有一个与之关联的唯一 SHA(称为版本文件中 git-tree)。 SHA 是使用目录的内容计算的;每次将更改提交到修改目录的存储库时,都会重新计算其 SHA。

Git 允许在给定目录的历史记录中随时检索给定目录的内容,前提是你知道其特定的 SHA。 通过使用此功能,vcpkg 可以使用各自的 SHA(git-tree)为特定端口版本编制索引。

若要在任何给定的修订版中获取端口目录的 SHA,可以使用以下 Git 命令:

git -C <path/to/ports> ls-tree --format='%(objectname)' <commit sha> -- <portname>

例:

git -C %VCPKG_ROOT%/ports ls-tree --format='%(objectname)' HEAD -- curl
6ef1763f3cbe570d6378632c9b5793479c37fb07

此命令返回当前修订版(HEAD)中包含 curl 端口的目录的 SHA。

可以使用命令 git show <git-tree>显示 git-tree 的内容:

git show 6ef1763f3cbe570d6378632c9b5793479c37fb07
tree 6ef1763f3cbe570d6378632c9b5793479c37fb07

0005_remove_imp_suffix.patch
0020-fix-pc-file.patch
0022-deduplicate-libs.patch
cmake-config.patch
cmake-project-include.cmake
dependencies.patch
export-components.patch
portfile.cmake
redact-input-vars.diff
usage
vcpkg-cmake-wrapper.cmake
vcpkg.json

或者具有 git show <git-tree>:<file>的特定文件的内容:

git show 6ef1763f3cbe570d6378632c9b5793479c37fb07:usage
curl is compatible with built-in CMake targets:

    find_package(CURL REQUIRED)
    target_link_libraries(main PRIVATE CURL::libcurl)

在手动过程中使用这些 Git 命令更新数据库文件可能是一项艰巨的任务。 出于此原因,我们建议使用 x-add-version 命令,只要存储库遵循建议的 注册表结构,该命令会自动执行该过程。 有关如何在 Git 注册表中发布端口的示例,请参阅 教程:使用 Git 将包发布到专用 vcpkg 注册表。

Filesystem 注册表

文件系统注册表中的基线文件布局

顶级字段

baseine.json 文件中的顶级对象是字典,此字典中的每个键都是一个名为基线 。 基线应包含注册表中所有端口到其基线版本的映射。

名字 类型 描述
命名基线 BaselineObject 其他基线。 字段名称对应于基线名称。

BaselineObject

基线对象是字典,每个键对应于注册表中的端口名称,其值是最新版本的端口。

名字 类型 描述
端口名称 BaselineVersionObject 端口名称到其最新版本的映射

BaselineVersionObject

名字 类型 描述
baseline 字符串 与注册表中端口的最新可用版本对应的字符串。
port-version 整数 对应于注册表中端口的最新端口版本的整数

文件系统注册表中基线文件的布局与 Git 注册表相同。 唯一的区别是文件系统不需要 default 基线。

Git 注册表中 baseline.json 文件的示例

{
  "2024-12-01": {
    "foo": {
      "baseline": "1.0.0",
      "port-version": 1
    }
  }
}

Git 注册表中的版本文件布局

versions 目录包含注册表中包含的包版本的所有信息,以及从文件系统位置检索这些版本的方法。

顶级字段

名字 类型 描述
versions VersionObject[] 版本对象的数组。 包含注册表中每个端口版本的条目。

VersionObject

名字 类型 描述
path 字符串 相应版本的端口文件的文件系统位置
version
version-semver
version-date
version-string
字符串 上游版本信息
端口版本 整数 端口文件修订

指定注册表 path 时,可以使用 $ 字符来引用注册表的根目录。 否则,可以改用绝对路径。

文件系统注册表版本文件的示例

{
  "versions": [
    {
      "path": "$/ports/foo/1.2.0",
      "version": "1.2.0",
      "port-version": 0
    },
    {
      "path": "$/ports/foo/1.1.0",
      "version": "1.1.0",
      "port-version": 0
    },
    {
      "path": "$/ports/foo/1.0.0",
      "version": "1.0.0",
      "port-version": 0
    }
  ]
}

后续步骤

下面是接下来要尝试的一些任务: