我刚刚错误地使用命令dvc remove training_data.dvc -p删除了一个DVC跟踪文件,这导致了我所有的训练数据集完全消失。我知道在Git中,我们可以很容易地根据一个已删除的分支的散列来还原它。有人知道如何恢复我在DVC中丢失的所有数据吗?
发布于 2020-06-18 05:17:16
您最有可能是安全的(至少数据没有丢失)。来自dvc remove 文档
注意,它不会从DVC缓存或远程存储中删除文件(参见dvc gc)。但是,请记住运行
dvc push来保存将来实际要使用或共享的文件。
因此,如果您像用dvc add和/或dvc run一样创建了Git,那么dvc remove -p就不会询问/警告您任何事情,这意味着数据被缓存起来类似于.dvc/cache中的Git。
有一些方法可以检索它,但是我需要知道一些更多的细节--您到底是如何添加数据集的?是你犯了training_data.dvc,还是它完全消失了?到目前为止,这是您添加的唯一数据吗?(很高兴在评论中帮助你)。
恢复目录
首先,这里是简要描述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文件都是一个JSON,包含一个目录的一个版本(文件名、散列等)。它拥有恢复它所需的所有信息。我们需要做的下一件事是了解我们需要哪一种。对于这一点,没有单一的规则,我建议检查(并根据用例选择):
好吧,现在让我们想象一下,我们决定恢复.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(请注意,path /20/b786b6f80e6f80e2b3fcf17827ad18597.dir变成一个散列值: 20b786b6e6f80e2b3fcf17827ad18597.dir)
并对此文件运行dvc pull。
应该是这样的。
https://stackoverflow.com/questions/62441146
复制相似问题