首页 > 解决方案 > git-lfs 和 dvc 的区别

问题描述

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

标签: gitgit-lfsdvc

解决方案


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

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

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

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


推荐阅读