Version control DVC如何将目录级别的差异存储到DVC缓存中?

Version control DVC如何将目录级别的差异存储到DVC缓存中?,version-control,dvc,Version Control,Dvc,有人能解释一下DVC是如何将目录级别的差异存储到DVC缓存中的吗 我知道DVC文件(.DVC)是元文件,用于跟踪数据、模型和重现管道阶段。但是,我不清楚创建分支、提交分支和切换回主文件的过程是如何以不同的方式保存的 简短版本: .dvc文件包含有关缓存中描述目录当前状态的JSON文件的信息(md5) 当目录被更新时,.dvc文件中有新的md5,新的JSON文件被创建为目录的更新状态 在git中,您存储.dvc文件,以便dvc知道(基于md5)在何处查找有关目录的信息 较长版本: 让我尝试中断使用

有人能解释一下DVC是如何将目录级别的差异存储到DVC缓存中的吗

我知道DVC文件(.DVC)是元文件,用于跟踪数据、模型和重现管道阶段。但是,我不清楚创建分支、提交分支和切换回主文件的过程是如何以不同的方式保存的

简短版本:

  • .dvc
    文件包含有关缓存中描述目录当前状态的JSON文件的信息(md5)

  • 当目录被更新时,
    .dvc
    文件中有新的md5,新的JSON文件被创建为目录的更新状态

  • 在git中,您存储
    .dvc
    文件,以便dvc知道(基于md5)在何处查找有关目录的信息

  • 较长版本:

    让我尝试中断使用DVC处理目录的特定步骤

    • 假设我们有一些您想要添加到DVC控制下的数据目录:
    • 您正在使用
      dvc add data
      使dvc跟踪您的目录。结果,DVC生成
      data.DVC
      文件。正如您所指出的,此文件包含将git存储库与数据存储连接所需的元数据。在此文件中(除其他内容外),您可以看到:
    • md5
      部分用于存储有关DVC缓存中目录的信息(
      .DVC/cache
      ):
    • 如果打开后缀为
      .dir
      的文件,您将看到它包含当前
      数据的描述
      状态:
    如您所见,特定文件(
    1
    2
    )由该文件中的条目描述

    • 更改目录时:
    将更新
    数据.dvc
    的内容:

    outs:
    - md5: 12f4b7d54a32e58818e27fba28376fba.dir
      path: data
    
    缓存中有一个新文件:

    ├── 12
    │   └── f4b7d54a32e58818e27fba28376fba.dir
    ...
    
    (dvc3.7) ➜  repo$ cat .dvc/cache/12/f4b7d54a32e58818e27fba28376fba.dir 
    [{"md5": "b026324c6904b2a9cb4b88d6d61c81d1", "relpath": "1"},
     {"md5": "26ab0db90d72e28ad0ba1e22ee510510", "relpath": "2"},
     {"md5": "6d7fce9fee471194aa8b5b6e47267f03", "relpath": "3"}]
    
    从git的角度来看,唯一的变化是在
    data.dvc
    内部。 (假设您在添加
    数据
    后使用
    1
    2
    进行了
    git提交
    ):

    注意:第一个md5对应于此文件的md5,因此它必须使用dir md5 change进行更改

    此外,请检查此问题-这是DVC如何处理文件的另一种解释。
    (dvc3.7) ➜  repo$ tree .dvc/cache
    .dvc/cache
    ├── 26
    │   └── ab0db90d72e28ad0ba1e22ee510510
    ├── b0
    │   └── 26324c6904b2a9cb4b88d6d61c81d1
    └── f4
        └── 37247ec66d73ba66b0ade0246fcb49.dir
    
    
    (dvc3.7) ➜  repo$ cat .dvc/cache/f4/37247ec66d73ba66b0ade0246fcb49.dir 
    [{"md5": "b026324c6904b2a9cb4b88d6d61c81d1", "relpath": "1"},
     {"md5": "26ab0db90d72e28ad0ba1e22ee510510", "relpath": "2"}]
    
    (dvc3.7) ➜  repo$ echo 3 >> data/3 
    (dvc3.7) ➜  repo$ dvc commit data.dvc
    
    outs:
    - md5: 12f4b7d54a32e58818e27fba28376fba.dir
      path: data
    
    ├── 12
    │   └── f4b7d54a32e58818e27fba28376fba.dir
    ...
    
    (dvc3.7) ➜  repo$ cat .dvc/cache/12/f4b7d54a32e58818e27fba28376fba.dir 
    [{"md5": "b026324c6904b2a9cb4b88d6d61c81d1", "relpath": "1"},
     {"md5": "26ab0db90d72e28ad0ba1e22ee510510", "relpath": "2"},
     {"md5": "6d7fce9fee471194aa8b5b6e47267f03", "relpath": "3"}]
    
    diff --git a/data.dvc b/data.dvc
    index 098aec5..88d1a90 100644
    --- a/data.dvc
    +++ b/data.dvc
    @@ -1,6 +1,6 @@
    -md5: a427c5bf8680fbf8d1951806b28b82fe
    +md5: 1b674d61c195eea7a6b14f176c020b9c
     outs:
    -- md5: f437247ec66d73ba66b0ade0246fcb49.dir
    +- md5: 12f4b7d54a32e58818e27fba28376fba.dir
       path: data
       cache: true
       metric: false