在 GitHub 上编辑

gc

缓存远程存储中删除未使用的文件和目录。

概要

描述

该命令可以删除(垃圾回收)存在于缓存中但不再需要的数据文件或目录。使用--cloud时,它还会删除远程存储中的数据

为避免意外删除数据,除非提供一个或多个作用域选项(--workspace--all-branches--all-tags--all-commits--all-experiments),否则dvc gc不会执行任何操作。请使用这些选项来指明哪些缓存文件仍被需要。详见选项部分。

保留的数据由给定作用域内提交集合中的DVC 文件决定。

请注意,dvc gc 会尝试从远程存储将缺失的 .dir 文件 拉取到本地缓存,以确定缓存目录中应包含哪些文件。如果缓存之前已被垃圾回收,或在新克隆的仓库副本中,这些文件可能缺失。

除非使用 --cloud 选项,否则只要数据此前已通过 dvc push 上传,就可以使用 dvc fetch 恢复从缓存中删除的文件。

删除远程存储中的数据

如果使用了 --cloud (-c) 标志,此命令除了删除本地 DVC 缓存中的无用数据外,还将从 dvc remote default 中删除数据。此外,要指定要从中删除数据的 DVC 远程存储,请使用 --remote (-r) 选项。

云存储上的删除是不可逆的,除非存在另一个包含相同数据的 DVC 远程存储或手动备份。

清理共享缓存(或远程存储)

如果多个项目共享同一个缓存并跟踪部分相同的文件,在一个项目中使用dvc gc将会破坏其他项目中重叠的数据链接。

为防止这种情况,请使用 --projects (-p) 选项。它可以接收一个或多个 DVC 项目的路径,确保这些项目中的数据不会被删除。请确保所有引用你希望保留文件的提交和分支已在其他项目中拉取。

例如,如果我们有多个项目且部分文件重叠,并希望清除仅在一个项目中使用的所有数据(例如,我们不再需要该项目),我们可以先克隆所有其他项目,获取它们的所有分支,然后将这些项目的路径传递给要清理的项目中的 dvc gc -p 命令。

选项

  • -w, --workspace - 仅保留工作区中引用的文件和目录。此选项会在启用其他作用域选项(如下所示)时自动激活。

  • --rev <commit> - 保留指定 <commit> 中引用的缓存数据,以及工作区中的数据(隐含 -w)。

  • -n <num>, --num <num> - 从指定的 --rev <commit>(必需)开始,保留最近 --num 个提交中引用的缓存数据,以及工作区中的数据(隐含 -w)。

  • -a, --all-branches - 保留所有 Git 分支中引用的缓存数据,以及工作区中的数据(隐含 -w)。如果使用分支来跟踪不同实验,则此选项非常有用。注意,此选项可与下方的 -T 结合使用,例如通过 -aT 标志。

  • -T, --all-tags - 保留所有 Git 标签中引用的缓存数据,以及工作区中的数据(隐含 -w)。如果使用标签标记实验或项目的某些版本,则此选项非常有用。注意,此选项可与上方的 -a 结合使用,例如通过 -aT 标志。

  • -A, --all-commits - 保留所有* Git 提交中引用的缓存数据,以及工作区中的数据(隐含 -w)。这将保留项目整个提交历史中使用过的所有数据的缓存。

    该选项的一个使用场景是:在未提交更改的情况下运行 dvc exp run 和/或 dvc repro 时,安全地删除所有临时数据缓存(参见这些命令中的 -O-M 以及 --no-commit 选项)。在此情况下,从未在工作区或任何 Git 提交中被引用的数据仍可能存储在项目的缓存中。

    * 不包括 DVC 实验

  • --date <YYYY-MM-DD> - 保留从指定日期当天或之后的任意提交中的实验数据。<YYYY-MM-DD> 参数需采用 ISO 8601 格式的日期。

  • --all-experiments - 保留所有 DVC 实验 中引用的缓存对象,以及工作区中的数据(隐含 -w)。这将保留项目的 实验性 数据。

  • -p <paths>, --projects <paths> - 如果多个项目共享同一个远程存储或单一缓存,可以使用此选项指定项目路径列表,以保留当前这些项目中引用的数据(每个项目为一个路径)。

  • --not-in-remote - 保留本地缓存中但不在远程存储中的缓存对象。这将删除那些已推送到远程且存在于远程的本地缓存对象。

    对于使用了 remote 字段 的对象,检查将在该远程进行。

    对于未使用 remote 字段 的对象,除非通过 -r 指定了特定远程,否则检查将在默认远程上进行。

  • -c, --cloud - 除清理本地缓存外,同时删除远程存储中的文件。

    此选项具有危险性,请仔细阅读说明。

    对于使用remote 字段 的对象,检查将在该远程进行。其他未使用该字段的文件可能会从该远程中被删除。

    对于未使用 remote 字段 的对象,除非通过 -r 指定了特定远程,否则检查将在默认远程进行。而其他使用remote 字段的文件可能会从该远程中被删除。

  • -r <name>, --remote <name> - 当指定了 -c 选项时,用于指定从哪个 dvc remote 收集未使用的对象(参见 dvc remote list)。

  • -j <number>, --jobs <number> - 指定 DVC 从远程存储读取数据时的并行任务数量。仅当使用 --cloud 选项或指定了 --remote 时生效。默认值为 4 * cpu_count()。注意,可通过 dvc remote modify 命令设置 jobs 配置项来自定义默认值。增加任务数可能加快操作速度。

    目前只有部分垃圾回收阶段是并行的。

  • -f, --force - 强制执行垃圾回收,跳过确认提示。

  • --dry - 仅打印将要删除的内容,但不实际删除。

  • -h, --help - 打印使用说明/帮助信息,然后退出。

  • -q, --quiet - 不向标准输出写入任何内容。如果没有问题则以 0 退出,否则以 1 退出。

  • -v, --verbose - 显示详细的跟踪信息。

示例

清理 缓存 的基本示例:

$ du -sh .dvc/cache/
7.4G    .dvc/cache/

当你运行 dvc gc --workspace 时,DVC 会从缓存中删除所有未在 工作区 中被引用的对象(通过从 DVC 文件 收集哈希值):

$ dvc gc --workspace

'.dvc/cache/files/md5/27e30965256ed4d3e71c2bf0c4caad2e' was removed
'.dvc/cache/files/md5/2e006be822767e8ba5d73ebad49ef082' was removed
'.dvc/cache/files/md5/2f412200dc53fb97dcac0353b609d199' was removed
'.dvc/cache/files/md5/541025db4da02fcab715ca2c2c8f4c19' was removed
'.dvc/cache/files/md5/62f8c2ba93cfe5a6501136078f0336f9' was removed
'.dvc/cache/files/md5/7c4521365288d69a03fa22ad3d399f32' was removed
'.dvc/cache/files/md5/9ff7365a8256766be8c363fac47fc0d4' was removed
'.dvc/cache/files/md5/a86ca87250ed8e54a9e2e8d6d34c252e' was removed
'.dvc/cache/files/md5/f64d65d4ccef9ff9d37ea4cf70b18700' was removed

现在我们检查一下大小:

$ du -sh .dvc/cache/
3.1G    .dvc/cache/
内容

🐛 发现问题?告诉我们!或者修复它:

在 GitHub 上编辑

有疑问?加入我们的聊天,我们会为您提供帮助:

Discord 聊天