DVC不使用Git进行检出

3

我在机器学习项目中使用DVC进行数据版本控制。通常,切换数据版本是通过检出git分支、提交或标签来管理的,以获取代表数据校验和的适当*.dvc文件,然后运行dvc checkout来更新数据,例如:

git checkout ddc5c395b2afb2b2a626c62ef63a2c7d85382aa6 # to rollback to an old version of *.dvc files
dvc checkout mydata.dvc # to roll `mydata` back to the previous version 

我现在想使用DVC,在不使用git的情况下切换数据版本,我期望的是以下内容:

dvc checkout mydata.dvc --tag v1.0

请问有人能指导我如何使用dvc吗?非常感谢任何帮助。


一个有点相关的CLI(和API)是dvc get-https://dvc.org/doc/command-reference/get#get。例如,此示例https://dvc.org/doc/command-reference/get#example-compare-different-versions-of-data-or-model。 - Shcheklein
2个回答

4
为了回应 @omessor 的评论,有一些 Python 包可以让您以编程方式处理 git 存储库 (而无需使用 CLI git)。DVC 本身通过 scmrepo使用 dulwichpygit2两种包。
您实际上可以通过 DVC 的内部 API 直接完成您想要的操作。
from dvc.repo import Repo

dvc = Repo("path/to/your/repo")
dvc.scm.checkout("tags/v1.0")  # git checkout tags/v1.0
dvc.checkout("mydata.dvc")  # dvc checkout mydata.dvc

这只需要通过pip或conda安装DVC,而不需要安装CLI git

请注意,这些API没有公开文档,因此您可能需要查看DVC和scmrepo源代码以了解其工作原理。

https://github.com/iterative/dvc/blob/main/dvc/scm.py


看起来很有潜力。如果它有效,我稍后会标记这个答案。谢谢您先生。 - TaQuangTu
嗨@pmrowla,你的建议正是我正在寻找的,感谢你的帮助,它拯救了我的一天。然而,我只能点赞这个答案,不能将其标记为已接受,因为它并没有完全符合问题的最终目标。再次感谢。 - TaQuangTu
嗨 @pmrowla,如果我的dvc远程位于一个ssh服务器上。我应该如何使用dvc.repo.Repo来初始化并连接到仓库? - TaQuangTu

2

使用DVC本身无法实现您想要的目标。正如您所展示的那样,DVC的一个功能是帮助将数据管理整合到现有的版本控制系统(如Git或SVN)中,以便轻松地将可作为文本进行版本控制的清单进行管理,然后您可以使用dvc文件作为实际数据的占位符或间接引用来轻松地与代码一起进行版本控制。

DVC本身并未实现完整的版本控制系统(它不会创建/管理refs/commits或tags)。

我想知道为什么您要试图摆脱Git,同时还要获得版本控制功能。例如,如果您只管理数据,那么只包含DVC工件的非常轻量级的git存储库是完全可以接受的,这样您将获得小型存储库和从git+dvc中获取所需行为而没有太多“成本”的好处。

然后,您将会拥有以下内容,而不是您列出的命令:

$ git checkout tags/v1.0
$ dvc checkout mydata.dvc

如果你想避免额外的输入,甚至可以很容易地将git+dvc耦合命令包装在一些轻量级的包装器或脚本中。

编辑:这个答案只涉及使用DVC作为CLI。看起来@TaGuangTu正在寻找代码用法并避免特定使用Git CLI。pmrowla's answer恰好回答了这个问题。


感谢您的迅速回复。我之所以想单独使用DVC,是因为我想在程序中以编程方式使用DVC,例如使用Python中的subprocess库运行dvc命令来管理数据版本。涉及到Git会使事情变得更加复杂。有什么解决办法吗? - TaQuangTu
1
请将以下与编程有关的内容从英语翻译成中文。仅返回已翻译的文本:编辑:将此评论移动到答案中,因为您无法在评论中使用格式化的代码块。 - pmrowla
1
谢谢回答@pmrowla - dvc.scm拯救了我们! 他的答案似乎是OP寻找的。我会编辑上面的内容以澄清答案仅适用于CLI。 - omesser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接