是否可以在不拉文件的情况下检查 DVC 元数据文件跟踪的文件版本是否存在于远程存储中?

问题描述

我的团队有一个设置,我们可以在其中跟踪 DVC 中的数据集和模型,并有一个 GitLab 存储库来跟踪我们的代码和 DVC 元数据文件。我们的开发 GitLab 管道中有一项工作(在每次推送合并请求时运行),其目标是检查以确保开发人员记得运行 dvc push 以保持 DVC 远程存储是最新的。现在,我们这样做的方法是在 GitLab 运行器上运行 dvc pull,它会失败并显示错误,告诉您未找到哪些文件(新文件或现有文件的最新版本)。

这种方法的缺点是我们将存储在 DVC 中的全部数据加载到 GitLab 运行器上,并且我们遇到了内存不足问题,更不用说下载所有数据的运行时间过长.由于对象的路径和 md5 哈希值存储在 DVC 元数据文件中,我认为这就是 DVC 能够回答“远程存储系统是否是最新的”问题所需的所有信息。>

似乎 dvc status 与我所要求的类似,但比较了缓存或工作区和远程存储。换句话说,它要求文件实际存在于进行调用的任何文件系统上。

有什么方法可以在不从 DVC 中提取所有内容的情况下实现我上面列出的目标(“通知开发人员他们需要运行 dvc push”)?

解决方法

似乎 dvc 状态与我要求的类似

dvc status --cloud 会给你一个“新”文件列表,如果它们还没有被推送到(默认)远程。不过它不会出错,因此您的 CI 脚本应该会根据标准输出消息失败。

更多信息:https://dvc.org/doc/command-reference/status#options

我还要求每个人运行 dvc install,它会设置一些 Git 钩子,包括自动 dvc pushgit push

https://dvc.org/doc/command-reference/install