DVC 使用指南:项目结构中.dvcignore文件详解

简介: .dvcignore 文件标记在遍历 DVC 项目时应排除哪些文件和目录。有时您可能希望 DVC 在处理项目时忽略某些文件。例如,在工作区目录中处理大量数据文件时,对于dvc status这样简单的操作,您可能会遇到执行时间延长的问题。 在其他情况下,您可能

.dvcignore 文件标记在遍历 DVC 项目时应排除哪些文件和目录。有时您可能希望 DVC 在处理项目时忽略某些文件。

例如,在工作区目录中处理大量数据文件时,对于dvc status这样简单的操作,您可能会遇到执行时间延长的问题。 在其他情况下,您可能希望省略与项目无关的文件或文件夹(如:macOS 上的 .DS_Store)。 为了解决这些情况,DVC 支持 .dvcignore 文件(可选的)。

.dvcignore 类似于 Git 中的 .gitignore,可以使用我们的辅助命令 dvc check-ignore 进行测试。


.dvcignore 文件是如何工作的?

  • 您需要创建一个 .dvcignore 文件。这些可以放在项目的根目录中,也可以放在任何子目录中。
  • .gitignore 范例格式 来填充它。您可以在此处找到有用的模板。
  • 每行应该只包含一个样式。
  • 在执行遍历目录的命令期间,DVC 将会忽略匹配到的路径。

注意事项

  • 忽略的文件不会保存在缓存中,它们对于 DVC 将不存在。值得记住这一点,尤其是在忽略 DVC 处理的目录中的文件时。
  • dvc rundvc repro 可能会删除被忽略的文件。 如果它们不是由流水线 Stage 产生的,它们可能会永久丢失。
  • 当您添加的 .dvcignore 模式影响现有输出时,其状态将发生变化,并且 DVC 的行为就像删除了受影响的文件一样。
  • 您可以使用 dvc check-ignore 命令检查给定的文件或目录是否被 .dvcignore 文件中的模式忽略。
  • 如果 DVC 在依赖或输出目录中找到 .dvcignore 文件,则会引发错误。 忽略此类目录中的文件应从项目树更高级别的 .dvcignore 处理。


示例

下面来进行一个具体的示例演示。

将某个文件添加到.dvcignore

我们来看看当我们将文件添加到 .dvcignore 时会发生什么:

$ mkdir data
$ echo 1 > data/data1
$ echo 2 > data/data2
$ tree
.
└── data
    ├── data1
    └── data2
复制代码


我们在 data/ 目录中创建了两个数据文件 。我们忽略其中一个,并仔细检查它是否被 DVC 忽略:

$ echo data/data1 >> .dvcignore
$ cat .dvcignore
data/data1
$ dvc check-ignore data/*
data/data1
复制代码


有关该命令的更多详细信息,请参阅 dvc check-ignore

添加目录时跳过特定文件

现在,让我们使用 dvc add 来跟踪目录,看看缓存中发生了什么:

$ dvc add data
...
$ tree .dvc/cache
.dvc/cache
├── 26
│   └── ab0db90d72e28ad0ba1e22ee510510
└── ad
    └── 8b0ddcf133a6e5833002ce28f97c5a.dir
$ md5 data/*
b026324c6904b2a9cb4b88d6d61c81d1  data/data1
26ab0db90d72e28ad0ba1e22ee510510  data/data2
复制代码


只存储了data/ 目录本身的缓存条目和一个文件。 手动检查数据文件的哈希值,我们可以看到data2被缓存了。 这意味着 dvc add 确实忽略了 data1

相关的详细信息,请参阅缓存目录的结构

忽略文件的状态更改

现在,让我们修改文件 data1,看看它是否会影响 dvc status 的状态。

$ dvc status
Data and pipelines are up to date.
$ echo "2345" >> data/data1
$ dvc status
Data and pipelines are up to date.
复制代码


可以看到,dvc status 忽略了 data1

对跟踪文件的修改会产生不同的输出,具体如下:

$ echo "345" >> data/data2
$ dvc status
data.dvc:
  changed outs:
    modified:           data
复制代码


移动忽略的数据

$ mkdir data
$ echo data1 >> data/data1
$ echo data2 >> data/data2
$ tree .
.
└── data
    ├── data1
    └── data2
$ echo data/data1 >> .dvcignore
$ cat .dvcignore
data/data1
$ dvc add data
复制代码


如果我们移动,并对忽略的数据不予理睬,DVC 将表现得好像我们通过添加新文件修改了数据目录:

$ dvc status
Data and pipelines are up to date.
$ mv data/data1 data/data3
$ dvc status
data.dvc:
  changed outs:
    modified:           data
复制代码


忽略 DVC 跟踪的文件

让我们分析一个工作区的示例:

$ mkdir dir1 dir2
$ echo data1 >> dir1/data1
$ echo data2 >> dir2/data2
$ dvc add dir1/data1 dir2/data2
$ tree .
.
├── dir1
│   ├── data1
│   └── data1.dvc
└── dir2
    ├── data2
    └── data2.dvc
复制代码


修改数据文件:

$ echo mod > dir1/data1
$ echo mod > dir2/data2
复制代码


检查状态:

$ dvc status
dir1/data1.dvc:
  changed outs:
    modified:           dir1/data1
dir2/data2.dvc:
  changed outs:
    modified:           dir2/data2
复制代码


注意:两个数据文件都显示为已修改。

下面,创建一个 .dvcignore 文件并插入与其中一个文件匹配的样式:

$ echo 'dir1/*' >> .dvcignore
复制代码


再次检查状态:

$ dvc status
dir2/data2.dvc:
  changed outs:
    modified:           dir2/data2
复制代码


上面仅会显示第二个文件,因为 DVC 现在忽略了 data1.dvcdata1


相关文章
|
2月前
|
Go
GoLand创建项目过程
GoLand创建项目过程
35 0
|
2月前
|
开发工具 git
把文件移动到在github上新建的文件
把文件移动到在github上新建的文件
|
Java 数据安全/隐私保护
在线预览项目kkFileView(二)代码讲解与修改
在线预览项目kkFileView(二)代码讲解与修改
836 0
在线预览项目kkFileView(二)代码讲解与修改
|
2月前
|
网络安全 开发工具 git
web后端-GitHub文件夹上传操作
web后端-GitHub文件夹上传操作
|
8月前
|
Java Maven
如何导出github项目并生成jar包
如何导出github项目并生成jar包
102 0
|
12月前
|
API
给项目写README文档
给项目写README文档
66 0
|
存储 机器学习/深度学习 缓存
DVC 使用指南:项目结构
在您的工作空间中使用 dvc init 将开始一个 DVC 项目,包括内部的 .dvc/ 目录。 从那里开始,您将创建和管理不同的 DVC 文件,并在使用 DVC 并进行数据科学实验时占据缓存。
|
存储 缓存 网络安全
DVC 使用指南:项目结构中.dvc文件详解
您可以使用 dvc add 来跟踪位于当前工作空间中的数据文件或目录。 此外,dvc import 和 dvc import-url 允许您将数据从外部的位置带到您的项目,并开始在本地跟踪它。 以 .dvc 扩展名结尾的文件由这些命令创建为可以使用 Git 进行版本控制的数据占位符。 它们包含随时跟踪目标数据所需的信息。
|
机器学习/深度学习 JSON 开发工具
DVC 使用指南:项目结构中dvc.yaml文件详解(上)
您可以通过在一个或多个 dvc.yaml 文件(或流水线文件)中定义各个阶段(Stage)来构建数据科学或机器学习流水线(Pipeline)。 Stage 相互连接时形成 Pipeline (形成依赖关系图,具体请见: dvc dag)。
|
机器学习/深度学习 存储 缓存
DVC 使用指南:项目结构中dvc.yaml文件详解(下)
您可以通过在一个或多个 dvc.yaml 文件(或流水线文件)中定义各个阶段(Stage)来构建数据科学或机器学习流水线(Pipeline)。 Stage 相互连接时形成 Pipeline (形成依赖关系图,具体请见: dvc dag)。

热门文章

最新文章