conan lock merge¶
$ conan lock merge -h
usage: conan lock merge [-h] [-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
-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 个或多个 lockfile 并将它们聚合,生成一个最终的 lockfile。例如,如果我们有两个 lockfile 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 将是完整的,如果锁文件不完整,可能需要
--lockfile-partial
。如果定义了配方修订版本,则必须包含时间戳才能正确排序。
警告
禁止手动操作 Conan lockfile,更改引用的严格排序,这可能导致任何任意未定义的行为。
请记住,无法使用
conan lock add
添加版本范围。版本可能不完整(例如,不提供修订版本),但它必须是精确的版本。
另请参阅
为了更好地理解 conan lock merge
,建议首先了解 lockfile 的一般概念,访问 lockfile 教程 以获取 lockfile 的实用介绍。
当由于某些原因出现多个已发生分歧的 lockfile 时,此 conan lock merge
命令可用于将它们合并到一个 lockfile 中。一个用例是创建一个多配置 lockfile,其中包含所有操作系统(Linux、Windows 等)所需的所有锁定版本,即使图中存在针对不同操作系统的条件依赖项。例如,在测试新的依赖项版本时,例如 pkg/3.4
新版本,而之前 pkg/3.3
已经在图中,我们可能希望拥有一个新的 lockfile 来清理之前的 pkg/3.3
。如果我们应用 --lockfile-clean
参数,它将删除 lockfile 中未使用的版本,但也会删除 OS 相关的依赖项。因此,可以执行以下操作:假设我们有这个 lockfile(为了简单起见,删除了修订版本)作为测试我们主要产品 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
新版本与我们的应用程序配合良好,我们希望从 lockfile 中清理未使用的内容。
$ 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"
]
}