Git Diff 视图

在结果页切换到 Git Diff 视图,以类似 git diff 的格式逐行查看两个 JSON 文档格式化后的文本差异。

结果页提供两种视图,用来回答两个不同的问题。数据对比检查解析后的 JSON 值在所选规则下是否有差异;Git Diff 检查两份原始输入文本的哪些行不同。结合使用两者,可以区分真实的数据变更与格式化、键重排等文本变化。

打开 Git Diff

  1. 输入 Base 和 Contrast 两份 JSON 文档并执行对比。
  2. 在结果页顶部工具栏中,使用视图控件从数据对比切换到 Git Diff。
  3. 在并排差异编辑器中查看原始文本:左侧为 Base,右侧为 Contrast。

Git Diff 为只读视图。如需修改输入,请返回编辑器;如需调整语义对比选项,请切回提供设置控件的数据对比视图。

为什么两种视图可能不一致

问题数据对比Git Diff
对比对象是什么?解析后的 JSON 值和结构每个编辑器中输入的原始文本
选项影响什么?数组匹配、大小写处理和数字字符串等价不会根据这些语义选项改写所显示的文本差异
缩进和换行重要吗?不重要文本发生变化时重要
对象键顺序重要吗?不重要重要,因为键所在的文本行或位置会变化
数组顺序重要吗?取决于所选数组方法重排后的文本可以显示为差异
结果适合回答什么?解释值、类型、键或数组差异定位源文本编辑和格式变化

例如:

Base

{
  "name": "catalog",
  "enabled": true
}

Contrast

{"enabled":true,"name":"catalog"}

数据对比没有发现语义差异,因为对象包含相同的键和值。Git Diff 则会显示文本变化,因为缩进、换行布局和键顺序都改变了。两个结果并不矛盾,它们描述的是不同层面。

反过来也可能发生。启用数字字符串等于数字后,数据对比可以将下面两个值视为相等:

{"port": 8080}
{"port": "8080"}

Git Diff 仍会把引号显示为文本变化。同样,忽略大小写的选项可以消除语义差异,但不会消除 Git Diff 中的对应文本变化。

正确解读两种视图

需要知道数据中发生了什么时,请使用数据对比。例如配置键被删除、布尔值变成 false,或数组条目不再匹配。相比一个发生变化的行号,结果路径和差异类型通常更便于定位问题。

需要审查实际提交的文本时,请使用 Git Diff。例如只修改空白、移动对象键、改变引号,或进行一次不应干扰数据审查的重新格式化。它对比的是输入时的文本,而不是归一化或美化后重新生成的内容。

解读数组结果时尤其要注意:Git Diff 始终能看到文本重排,而数据对比遵循所选的数组对比方法。按索引和 LCS 保留顺序敏感性,无序模式则按保留重复次数的多重集对比。切换到无序模式不会消除 Git Diff 中的重排差异。

“Git Diff”这个名称描述的是熟悉的并排展示方式,并不表示会对比提交、分支或仓库历史;它只对比当前的两份输入文本。虽然展示的是文本,但结果页需要通过 JSON 对比进入,因此无效 JSON 必须先修正,对比才能完成。

推荐的检查顺序

  1. 先使用数据对比。 根据数据约定选择选项,而不是以差异更少为目标。
  2. 检查结果路径。 确认新增和删除数组元素的匹配方式符合预期,尤其是对象内容发生变化时。
  3. 遇到难以解释的干扰项时切换到 Git Diff。 查找格式、键顺序或其他不构成语义变化的原始文本编辑。
  4. 修改设置后回到数据对比。 Git Diff 会继续显示原始文本,不能用它验证语义选项是否生效。

常见问题排查

Git Diff 有变化,但数据对比没有差异。 先检查格式和对象键顺序,再检查已启用的大小写处理和数字字符串选项。如果只是数组顺序变化,还要确认是否选择了无序模式。

插入一个数组元素后,数据对比出现大量差异。 文本视图无法判断哪种数组对齐方式正确。如果顺序重要,并且希望已有元素跨越插入点保持匹配,可尝试 LCS;如果位置本身有意义,则使用按索引。

预期的文本变化没有出现在数据对比中。 数据对比不是拼写或格式检查工具。它会有意忽略不改变解析值的展示差异,已启用的选项也可能让不同文本表示在语义上相等。

Git Diff 中看不到设置控件。 请切换到数据对比以修改对比选项。Git Diff 始终是原始输入文本的只读视图。