dvc - 还原 dvc remove -p 命令

标签 dvc

我刚刚使用命令 dvc remove training_data.dvc -p 错误地删除了一个 DVC 跟踪文件,这导致我所有的训练数据集完全消失了。我知道在 Git 中,我们可以很容易地根据哈希值恢复已删除的分支。有谁知道如何恢复我在 DVC 中丢失的所有数据?

最佳答案

您应该很安全(至少数据没有丢失)。来自dvc remove docs :

Note that it does not remove files from the DVC cache or remote storage (see dvc gc). However, remember to run dvc push to save the files you actually want to use or share in the future.

因此,如果您创建了 training_data.dvcdvc add 一样和/或 dvc rundvc remove -p没有询问/警告您任何事情,这意味着数据缓存类似于 .dvc/cache 中的 Git .

有多种方法可以检索它,但我需要了解更多细节 - 您究竟是如何添加数据集的?你有没有提交 training_data.dvc或者它完全消失了?到目前为止,这是您添加的唯一数据吗? (很高兴在评论中为您提供帮助)。

恢复目录

首先,here是简要描述 DVC 如何在缓存中存储目录的文档。

我们能做的就是找到所有.dir .dvc/cache 中的文件:

find .dvc/cache -type f -name "*.dir"

输出类似:

.dvc/cache/20/b786b6e6f80e2b3fcf17827ad18597.dir
.dvc/cache/00/db872eebe1c914dd13617616bb8586.dir
.dvc/cache/2d/1764cb0fc973f68f31f5ff90ee0883.dir

(如果本地缓存丢失并且我们正在从远程存储恢复数据,则适用相同的逻辑,命令(例如在 S3 上查找扩展名为 .dir 的文件)看起来不同)

每个.dir file 是一个 JSON,其中包含一个目录版本的内容(文件名、哈希等)。它具有恢复它所需的所有信息。我们需要做的下一件事是了解我们需要哪一个。没有一个单一的规则,我建议检查(并根据您的用例选择):

  • 检查修改日期(如果您记得添加此数据的时间)。
  • 检查这些文件的内容 - 如果您记得某个特定文件名只存在于您要查找的目录中 - 只需 grep 即可。
  • 尝试一一还原并检查目录内容。

好吧,现在假设我们决定要恢复 .dvc/cache/20/b786b6e6f80e2b3fcf17827ad18597.dir ,(例如,因为它的内容看起来像:

[
{"md5": "6f597d341ceb7d8fbbe88859a892ef81", "relpath": "test.tsv"}, {"md5": "32b715ef0d71ff4c9e61f55b09c15e75", "relpath": "train.tsv"}
]

我们想得到一个目录 train.tsv ).

我们唯一需要做的就是创建一个 .dvc引用此目录的文件:

outs:
- md5: 20b786b6e6f80e2b3fcf17827ad18597.dir
  path: my-directory

(注意,路径/20/b786b6e6f80e2b3fcf17827ad18597.dir 变成了哈希值:20b786b6e6f80e2b3fcf17827ad18597.dir)

然后运行 ​​dvc pull在这个文件上。

应该是这样吧。

关于dvc - 还原 dvc remove -p 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62441146/

相关文章:

jenkins - Jenkins 中的 SSH 自动化

git - 即使在提供正确的远程缓存配置后,"dvc add -external S3://mybucket/data.csv"也因访问错误而失败

python - 初始化 DVC 存储库会引发错误

data-management - 从其他项目更新 dvc 注册表中的数据

dvc - 更新 DVC 中的跟踪目录

google-client - 使用 Google Drive Remote 进行数据版本控制 : "googleapiclient.errors.UnknownApiNameOrVersion: name: drive version: v2"

git - 执行 git merge 时 DVC 会做什么?

python - Shell 脚本 “dvc pull” 无法在 Streamlit 服务器上运行

dvc - 运行 dvc push 到 DAGsHub 时,Git bash 命令提示符挂起

filesystems - DVC 中的文件名规则是什么?可以通过配置进行控制吗?