# DVC 数据管道：改一份输入只重跑受影响步骤，交付可复算结果与依赖记录

## 执行范围

已运行DVC原生repro：改raw只重跑clean→metrics，catalog跳过；不变输入再次全跳过，交付真实dvc.lock与summary。

## 输入与目标

原始CSV→清洗→指标和另一份不相关字典，三阶段依赖

交付：dvc.yaml、lock、真实指标和阶段运行记录

## 运行

在 reference 目录执行；先按文件 requirements.txt / package.json 或原生工具文档安装依赖。浏览器练习需 `npx playwright install chromium`；也可设置 `PLAYWRIGHT_EXECUTABLE_PATH` 为自己的 Chrome 路径。

```sh
python run.py
```

## 目录

- fixtures：作者原创输入，不包含用户真实资料。
- starter：读者待完成任务。
- reference：作者完成参考。
- results：作者实际运行所得或明确标注的待运行输入/预期合同。

## 七步

1. **明确三阶段依赖**

clean读raw.csv，metrics读clean.json，catalog独立读labels.txt。先画清实际文件关系，不把全部输入塞给每个阶段。

2. **声明原生DAG**

dvc.yaml逐阶段写cmd/deps/outs，命令实际调用stage.py。参数和源码变化也属于依赖，不能漏掉。

3. **运行首次管道**

在独立Git/DVC练习仓库执行repro，保留首次产物与锁文件。没有真实运行记录的YAML不证明管道可复算。

4. **只改一份原始输入**

将harbor从8改11，其他文件不动。预期active_rows仍2、total从20变23，catalog内容不变。

5. **观察受影响重跑**

原生DVC重新执行clean和metrics，catalog显示didn't change, skipping。不是作者根据文件名手动选择了两个脚本运行。

6. **重复不变验收**

再次repro，三个阶段都跳过，Data and pipelines are up to date。缓存命中不能被报告成阶段又计算了一次。

7. **交付可复算文件**

保存dvc.yaml、dvc.lock、日志和summary。运行缓存、.git/.dvc内部目录不进入ZIP，读者按README在自己的目录重建。

## 来源

- https://raw.githubusercontent.com/iterative/dvc.org/main/content/docs/command-reference/repro.md


## 原生工具与边界补充

运行依赖DVC和Git，不分发work/.git、work/.dvc/cache；脚本会在自己的work重新初始化，DVC记录相对依赖。
