conan lock merge¶
$ conan lock merge -h
usage: conan lock merge [-h] [--out-file OUT_FILE] [-v [V]] [-cc CORE_CONF]
[--lockfile LOCKFILE] [--lockfile-out LOCKFILE_OUT]
Merge 2 or more lockfiles.
options:
-h, --help show this help message and exit
--out-file OUT_FILE Write the output of the command to the specified file
instead of stdout.
-v [V] Level of detail of the output. Valid options from less
verbose to more verbose: -vquiet, -verror, -vwarning,
-vnotice, -vstatus, -v or -vverbose, -vv or -vdebug,
-vvv or -vtrace
-cc CORE_CONF, --core-conf CORE_CONF
Define core configuration, overwriting global.conf
values. E.g.: -cc core:non_interactive=True
--lockfile LOCKFILE Path to lockfile to be merged
--lockfile-out LOCKFILE_OUT
Filename of the created lockfile
conan lock merge
命令接受 2 个或多个锁定文件并将它们聚合,生成一个最终的锁定文件。例如,如果我们有 2 个锁定文件 lock1.lock
和 lock2.lock
,我们可以将它们合并到一个最终的 conan.lock
文件中
# we have 2 lockfiles lock1.lock and lock2.lock
$ conan lock add --requires=pkg/1.1 --lockfile-out=lock1.lock
$ cat lock1.lock
{
"version": "0.5",
"requires": [
"pkg/1.1",
],
"build_requires": [],
"python_requires": []
}
$ conan lock add --requires=other/2.1 --build-requires=tool/3.2 --lockfile-out=lock2.lock
$ cat lock2.lock
{
"version": "0.5",
"requires": [
"other/2.1"
],
"build_requires": [
"tool/3.2"
],
"python_requires": []
}
# we can merge both
$ conan lock merge --lockfile=lock1.lock --lockfile=lock2.lock
$ cat conan.lock
{
"version": "0.5",
"requires": [
"pkg/1.1",
"other/2.1"
],
"build_requires": [
"tool/3.2"
],
"python_requires": []
}
类似于 conan lock add
命令,conan lock merge
确实保持版本列表的严格排序
它不执行任何类型的验证,以检查包或版本是否存在,或者它们是否属于给定的依赖关系图
它是对 json 文件进行基本处理,并将它们聚合。
它不保证锁定文件是完整的,如果不是,可能需要
--lockfile-partial
Recipe 修订版本(如果已定义)必须包含时间戳才能正确排序。
警告
禁止手动操作 Conan 锁定文件,更改引用的严格排序,这可能会导致任何任意的未定义行为。
请注意,无法使用
conan lock add
添加版本范围。版本可能不完全完整(例如未提供修订版本),但它必须是确切的版本。
另请参阅
为了更好地理解 conan lock merge
,建议首先了解锁定文件的一般概念,访问 锁定文件教程 以获得锁定文件的实践介绍。
当由于某些原因导致多个锁定文件发散时,此 conan lock merge
命令可用于在单个锁定文件中进行合并。一个用例是创建一个多配置锁定文件,其中包含所有操作系统(Linux、Windows 等)的所有必要锁定版本,即使图中存在针对不同操作系统的条件依赖项也是如此。在某个时候,当测试新的依赖项版本时,例如 pkg/3.4
新版本,而之前的 pkg/3.3
已经存在于图中,我们可能希望拥有这样一个新的锁定文件来清理之前的 pkg/3.3
。如果我们应用 --lockfile-clean
参数,它将删除锁定文件中未使用的版本,但也会删除依赖于操作系统的依赖项。因此,可以执行以下操作:假设我们有这样一个锁定文件(已简化,为简单起见移除了修订版本),作为为我们的主要产品 app1/0.1
测试新的 pkgb/0.2
版本的结果
{
"version": "0.5",
"requires": [
"pkgb/0.2",
"pkgb/0.1",
"pkgawin/0.1",
"pkganix/0.1",
"app1/0.1"
]
}
pkgawin
和 pkganix
是分别仅存在于 Windows 和 Linux 中的依赖项。一切看起来都不错,pkgb/0.2
新版本与我们的应用程序配合良好,我们希望从锁定文件中清除未使用的内容
$ conan lock create --requires=app1/0.1 --lockfile=app.lock --lockfile-out=win.lock -s os=Windows --lockfile-clean
# Note how both pkgb/0.1 and pkganix are gone
$ cat win.lock
{
"version": "0.5",
"requires": [
"pkgb/0.2",
"pkgawin/0.1",
"app1/0.1"
]
}
$ conan lock create --requires=app1/0.1 --lockfile=app.lock --lockfile-out=nix.lock -s os=Linux --lockfile-clean
# Note how both pkgb/0.1 and pkgawin are gone
$ cat win.lock
{
"version": "0.5",
"requires": [
"pkgb/0.2",
"pkganix/0.1",
"app1/0.1"
]
}
# Finally, merge the 2 clean lockfiles, for keeping just 1 for next iteration
$ conan lock merge --lockfile=win.lock --lockfile=nix.lock --lockfile-out=final.lock
$ cat final.lock
{
"version": "0.5",
"requires": [
"pkgb/0.2",
"pkgawin/0.1",
"pkganix/0.1",
"app1/0.1"
]
}