YAML 对比工具

查看两份 YAML 配置之间真正改动了什么。结构比较会忽略键顺序、缩进和引号风格,并列出每个变更路径,例如 spec.replicas。

原始版本
修改版本

数据不会离开你的浏览器。快捷键:Ctrl/⌘ + Enter 执行主操作。

什么是 YAML 对比?

YAML 对比会比较两个 YAML 文档并显示它们的差异。Kubernetes、Helm、Docker Compose、GitHub Actions、Ansible 和 OpenAPI 的配置文件都是 YAML,当两个版本不一致时,人们关心的通常是“哪个配置项变了?”而不是“哪一行变了?”。本工具两者都能回答:结构比较会解析两个文件并列出变更路径,并排视图则显示各行内容并高亮改动的词语。

如何比较两个 YAML 文件

  1. 在左侧粘贴或拖入原始 YAML,在右侧放入修改后的版本。
  2. 保持比较结构可忽略键顺序、缩进、引号和注释;选择比较文本则按原文对比文件。
  3. 使用隐藏相同行聚焦于变更,使用上一处 / 下一处逐个查看。

示例:一次 Kubernetes 变更

# before                         # after
spec:                            spec:
  replicas: 3                      template:
  template:                          spec:
    spec:                              containers:
      containers:                        - name: web
        - name: web                        image: nginx:1.27
          image: nginx:1.25        replicas: 5

由于 replicas 被移到了末尾,按行对比几乎会标记每一行。而结构对比只报告两处变更:spec.replicas 3 → 5,以及 spec.template.spec.containers[0].image nginx:1.25 → nginx:1.27。

哪些会被忽略,哪些不会

结构模式下忽略会被报告
映射内的键顺序新增、删除和修改的键
缩进以及流样式与块样式的差异新增、删除和修改的列表项
引号(a 与 "a")类型变化("5" 与 5)
注释和锚点解析锚点后不同的值

在 YAML 中,字符串 "5" 和数字 5 是不同的值,对比结果会明确指出。这能发现一种经典的配置错误:带引号的端口号或版本号被一个工具读成字符串,却被另一个工具读成数字。

如果不确定文件能否正常解析,请先用 YAML 校验器逐个检查。比较 JSON 文件请使用 JSON 对比。

YAML 对比常见问题

为什么用 YAML 对比而不是 git diff?

git diff 按行比较,因此重新缩进代码块、调整键顺序或更换引号风格都会显示为大量改动,尽管配置本身没变。结构化 YAML 对比比较的是解析后的数据,只报告真正的差异,并给出每处差异的路径。

会考虑锚点和合并键吗?

会。比较之前两个文件都会被完全解析,因此把共享配置移到锚点中再用 <<: *defaults 合并,只要结果相同就不会被报告为变更。

可以比较多文档 YAML(例如 Kubernetes 清单)吗?

可以。每个文件中的文档会按顺序视为一个列表,变更路径以文档索引开头,例如第二个文档的 [1].spec.replicas。

注释算作差异吗?

在结构模式下不算,因为注释不属于数据。如需查看注释的变化,请使用“比较文本”。

可以比较 YAML 文件和 JSON 文件吗?

可以。每一侧都会用相应的解析器解析,因此你可以检查生成的 JSON 文件是否与其 YAML 源文件一致。