概述
本文介绍每种注册表的实现详细信息。 具体而言,此文件涉及每种注册表的建议布局及其各自 版本数据库的预期内容。
注意
本文包含有关如何实现自定义注册表的信息。 有关在项目中使用自定义注册表的信息,请参阅 使用注册表 一文。
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
}
]
}
后续步骤
下面是接下来要尝试的一些任务: