Git Diff 视图
在结果页切换到 Git Diff 视图,以类似 git diff 的格式逐行查看两个 JSON 文档格式化后的文本差异。
结果页提供两种视图,用来回答两个不同的问题。数据对比检查解析后的 JSON 值在所选规则下是否有差异;Git Diff 检查两份原始输入文本的哪些行不同。结合使用两者,可以区分真实的数据变更与格式化、键重排等文本变化。
打开 Git Diff
- 输入 Base 和 Contrast 两份 JSON 文档并执行对比。
- 在结果页顶部工具栏中,使用视图控件从数据对比切换到 Git Diff。
- 在并排差异编辑器中查看原始文本:左侧为 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 必须先修正,对比才能完成。
推荐的检查顺序
- 先使用数据对比。 根据数据约定选择选项,而不是以差异更少为目标。
- 检查结果路径。 确认新增和删除数组元素的匹配方式符合预期,尤其是对象内容发生变化时。
- 遇到难以解释的干扰项时切换到 Git Diff。 查找格式、键顺序或其他不构成语义变化的原始文本编辑。
- 修改设置后回到数据对比。 Git Diff 会继续显示原始文本,不能用它验证语义选项是否生效。
常见问题排查
Git Diff 有变化,但数据对比没有差异。 先检查格式和对象键顺序,再检查已启用的大小写处理和数字字符串选项。如果只是数组顺序变化,还要确认是否选择了无序模式。
插入一个数组元素后,数据对比出现大量差异。 文本视图无法判断哪种数组对齐方式正确。如果顺序重要,并且希望已有元素跨越插入点保持匹配,可尝试 LCS;如果位置本身有意义,则使用按索引。
预期的文本变化没有出现在数据对比中。 数据对比不是拼写或格式检查工具。它会有意忽略不改变解析值的展示差异,已启用的选项也可能让不同文本表示在语义上相等。
Git Diff 中看不到设置控件。 请切换到数据对比以修改对比选项。Git Diff 始终是原始输入文本的只读视图。