git-lfs和dvc之间的区别

时间:2019-10-24 12:19:46

标签: git git-lfs dvc

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

3 个答案:

答案 0 :(得分:7)

DVC是git-lfs的更好替代。

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

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

答案 1 :(得分:6)

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

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

DVC 与 git-lfs 的目的不同DVC不仅用于保存大文件,而且主要管理大文件是确定性过程的结果。因此,除了存储大文件之外,dvc 还控制处理管道,就像 Makefile 一样,通过在 Makefile 中定义依赖关系,如果处理输入(也是 dvc 跟踪的文件或参数) ) 更改,dvc 计算必须重新生成哪些文件(是的,例如 Makefiles)。这就是为什么 DVC 通常被描述为 用于数据科学的 makefile 工具。如果您要生成大量的大型 AI 模型或繁重的数据文件,那就太棒了。

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

答案 2 :(得分:3)