git-lfs 和 dvc 的区别

Difference between git-lfs and dvc

这两者有什么区别?我们在上一份工作中使用了 git-lfs,而在我当前的工作中,我们开始将 dvc 与 git 一起使用。它们都放置某种索引而不是文件,并且可以按需下载。 dvc 比前者有什么改进吗?

DVC 是 git-lfs 的更好替代品。

与git-lfs不同,DVC不需要安装专用服务器;它可以在本地(例如 NAS、SSH)或与任何主要云提供商(S3、Google Cloud、Azure)一起使用。

更多信息:https://dvc.org/doc/use-cases/data-and-model-files-versioning

DVC 并不比git-lfs好:它们完全不同。选择的答案在很大程度上是有偏见的。两者只是不同的工具,用于不同的目的。

  • git-lfs 旨在对 git 透明,因此需要定制服务器。它的学习过程短而快。一些配置命令,砰!它是 运行,独立于 git 存储库存储大文件。这是它唯一的功能,而且它做得很好。拥有额外的服务器并不是缺点,而是对这种透明度的要求。配置后,文件仅由 git 通过 git 挂钩(在 git 操作后激活的端点)处理。
  • dvc旨在为最终用户提供大文件的独立管理。 dvc 基本上做的是:它只是让 git 忽略您希望控制的文件(将它们添加到 .gitignore),而是生成一个具有相同名称和扩展名的附加文件 .dvc。因此,为了推送带有相应文件的提交,用户需要手动“添加”(相当于 git commit,而不是 git add; dvc 中的 git 阶段没有等效项)和“推送”到两个系统。这不是缺点,而是必要的控制级别。作为交换,远程大文件持有者只是任何远程文件系统,可以通过其路径直接访问,通过 ssh 或通过多个驱动程序(google 驱动器,亚马逊等)。反正dvc也有hooks,这样可以简化大文件的使用,如果有额外的文件不烦人,保存文件到远程需要额外的操作,记住它们。git忽略!因此,如果您修改存储在 dvc 中的文件,这样的更改将不会被 git status 注意到,并且您可能会丢失这样的更改,除非您使用 dvc 进行额外检查。

DVC 与 git-lfs 的目的不同。 DVC 不仅用于保存大文件,而且主要管理由确定性过程 产生的大文件。因此,除了存储大文件之外,dvc 还通过在 Makefile 中定义依赖项来控制处理管道,如 Makefiles 所做的那样,如果处理输入(也是 dvc 跟踪的文件或参数) ) 更改,dvc 计算必须重新生成哪些文件(是的,像 Makefiles)。这就是为什么 DVC 通常被描述为 数据科学的 makefile 工具 。如果您要生成大量的大型 AI 模型或大量数据文件,那就太棒了。与编译大型应用程序完全相同:每个局部更改都意味着只编译整体的一小部分。

就个人而言,我将两者都用于大文件存储。 git-lfs 简化了大文件管理,但 dvc 简化了大文件存储(这简化了管理),代价是没有这种透明度,有时会丢失数据。我仍然不使用 dvc 进行管道计算,直到现在我更喜欢我自己的实现。 DVC越来越好,也许我以后会用得更多。两者只是不同;我目前两种都用,根据用途。