update
更新从外部 DVC 仓库 或 URL 导入的文件或目录,以及相应的导入 .dvc
文件。
概要
usage: dvc update [-h] [-q | -v] [-R] [--rev <commit>]
[--to-remote] [-r <name>]
[--no-download] [-j <number>]
targets [targets ...]
positional arguments:
targets Import .dvc files to update. Using -R, directories
to search for .dvc files can also be given.
描述
使用 dvc import
、dvc import-url
或 dvc import-db
创建导入阶段(.dvc
文件)后,数据源可能会发生变化。请使用 dvc update
将这些导入的文件或目录更新至最新状态。
要指定需要更新的导入阶段,可以在命令参数中提供对应的 .dvc
文件 targets
。
请注意,导入阶段始终被视为冻结状态,这意味着如果你运行 dvc repro
,它们不会被更新。dvc update
是唯一可以更新它们的命令。
不带标志的 dvc update
对固定到提交哈希(.dvc
文件中的 rev
字段)的导入阶段无效。请使用 --rev
选项将导入的产物更新到不同的版本。
$ dvc update --rev master
选项
-
--rev <version>
- 指定要从中更新文件或目录的仓库的提交哈希、分支或标签名称等(任何 Git 版本)。默认使用默认分支中的最新提交。对于通过
dvc import-url --version-aware
获取的数据,此选项可用于指定对象版本 ID。默认情况下,将使用云存储中的当前版本。该操作会更改导入的
.dvc
文件中的rev
字段。 -
-R
,--recursive
- 通过搜索每个目标目录及其子目录中的导入.dvc
文件来确定要更新的文件。如果目标中没有目录,则此选项无效。 -
--no-download
- 更新.dvc
文件中的数据校验和(md5
、etag
或checksum
字段),但不实际下载最新数据。更多上下文请参见dvc import-url --no-download
或dvc import --no-download
。不能与--to-remote
同时使用。 -
--to-remote
- 更新使用dvc import-url
创建的.dvc
文件,并将数据直接传输到远程存储(除非使用 -r 指定,否则为默认远程),而不保存在本地。使用dvc pull
可将数据拉取到本地。 -
-r <name>
,--remote <name>
- 指定dvc remote
的名称(只能与--to-remote
一起使用)。 -
-j <number>
,--jobs <number>
- DVC 从源下载数据时的并行级别。默认值为4 * cpu_count()
。使用更多任务可能加快操作速度。 -
-h
,--help
- 打印使用说明/帮助信息,然后退出。 -
-q
,--quiet
- 不向标准输出写入任何内容。如果没有问题则以 0 退出,否则以 1 退出。 -
-v
,--verbose
- 显示详细的跟踪信息。
示例
我们首先从我们的 入门示例仓库 中导入一个数据产物:
$ dvc import git@github.com:iterative/example-get-started model.pkl
Importing 'model.pkl (git@github.com:iterative/example-get-started)'
-> 'model.pkl'
正如 DVC 所提到的,导入阶段(.dvc
文件)model.pkl.dvc
已被创建。不过此 阶段 默认是冻结的,因此要重新生成它,我们需要先对其运行 dvc unfreeze
,然后运行 dvc repro
(之后可再次运行 dvc freeze
)。我们不妨直接在此阶段上运行 dvc update
:
$ dvc update model.pkl.dvc
Output 'model.pkl' didn't change. Skipping saving.
Saving information to 'model.pkl.dvc'.
这次没有任何变化,因为源项目本身相当稳定。
请注意,
dvc update
会在有新变更需要引入时,更新相应.dvc
文件中的rev_lock
字段。
示例:将固定版本更新为另一个版本
另请参阅 导入并更新固定版本。
我们先从我们的快速入门示例仓库的特定版本中导入一个模型:
$ dvc import --rev baseline-experiment \
git@github.com:iterative/example-get-started \
model.pkl
Importing 'model.pkl (git@github.com:iterative/example-get-started)'
-> 'model.pkl'
执行后,导入阶段(.dvc
文件)model.pkl.dvc
被创建。现在尝试在此文件上运行 dvc update
,看看会发生什么。
$ dvc update model.pkl.dvc
没有任何输出,意味着 model.pkl
文件未被更新。这是因为我们将导入阶段绑定到了一个未发生变化的 rev
(即标签 baseline-experiment
指向某个特定的 Git 提交)。因此,该文件不会被更新。
现在我们尝试将模型更新到另一个版本:
$ dvc update --rev bigrams-experiment model.pkl.dvc
Importing 'model.pkl (git@github.com:iterative/example-get-started)'
-> 'model.pkl'
导入阶段将被覆盖,并从指定提交中的最新更改中获取更新(标签 bigrams-experiment
)。