简体中文

开发者工具·文本比较

如何读取统一差异:大块标题、上下文行和 +/- 标记

· 背景

文本差异 补丁 开发人员工作流程

一堆上下文,在两个文件标签旁边删除和添加了行
原始 ToolAcre 矢量图

逐行解码统一的 diff 格式,从文件头和 @@ hunk 范围到上下文行和更改标记,因此任何工具的补丁都有意义。

优点、缺点和 @@ 符号的墙 - 从第一次遇到电子邮件或拉取请求中的补丁开始

下载的 `changes.patch` 以类似于熟悉的 diff 输出的标点符号开头,但其确切结构很重要。 ToolAcre 写入两个标签,然后为每个比较行写入一个字符标记。读取存在的内容比在头脑中从另一种补丁格式提供字段更安全。

在纯文本编辑器中打开文件。前两行将 UI 提供的左右标签标识为 `original` 和 `changed`。后续行通过上下文、删除和添加标记重建比较的文本。

文件头行 — 解释 --- 和 +++ 行、路径以及 a/ 和 b/ 前缀工具添加

标头为 `--- original`,后跟 `+++ changed`。在其他工具中,这些前缀可能位于更丰富的补丁语法中,但此导出器不添加时间戳、路径或元数据。标签描述的是侧面,而不是证明磁盘上存在的文件。

这种区别很重要,因为 Text diff 接受粘贴的字符串而不是文件对象。下载后比较后会创建本地文本报告。将标签视为存储库路径或修订标识符将归因 UI 从未收集的出处。

Hunk 标头解释 - 将 @@ -12,7 +12,8 @@ 解码为起始行和每侧的行数

`toUnifiedText` 中没有以 `@@` 开头的行。该函数直接映射两个标签之后的所有行。因此,此输出没有要解码的大范围,并且下载的文本中没有嵌入起始行 /count 对。

行号在呈现的浏览器视图中仍然可用,其中行带有左侧和右侧位置。导出选择更简单的表示形式。如果下游程序需要标准完整的统一块,请验证兼容性,而不是假设 `.patch` 扩展提供缺少的语法。

ToolAcre 不发出 @@ hunk 标头,因此没有可解码的标头

前导空格标记未更改的行,减号标记左侧删除,加号标记右侧添加。 UI 可以在视觉上折叠长时间相等的运行,但 `lastDiff` 保留完整结果并下载序列化所有行。没有跳过标记进入补丁字符串。

大纲提到了默认的三个上下文行。三是由视觉折叠调用使用,而不是由导出使用。合并这些路径会低估下载的内容。表示和序列化共享行,但应用不同的转换。

下载标记每一行并且不使用三行上下文默认值

比较左`a b` with right `a c`. The exported lines are the two labels, then space-a, minus-b and plus-c. Reading top to bottom says that `a` survives, `b` leaves the original and `c` 进入已更改的一侧。

因此,当对齐将它们放在一起时,修改被表示为相邻的删除和添加。该格式并未将其命名为“已修改”。如果重复的行允许另一次对齐,则序列可能看起来不同,同时仍然考虑每个输入行。

工作示例:读取 ToolAcre 实际导出的完整补丁形流

正常、上下文和完整的统一 diff 格式都有自己的规范和历史,但这些规范和历史并未由此处使用的源集实现或记录。本文没有说明为什么一种格式变得流行,也没有列出 ToolAcre 不发出的字段。

当另一个工具必须应用补丁时使用版本控制命令。 ToolAcre 的下载作为便携式审查工件很有用,但存储库不包含补丁解析器或应用函数,证明它可以通过任意补丁使用者进行往返。

完整的统一、上下文和正常格式比较需要外部资源

二进制补丁、重命名标头、模式更改和应用程序不在此路线之外。该文本不包含对象标识符或共同祖先。它不能简单地表示存储库操作,因为它的标记看起来很熟悉。

导出器还反映活动的比较选项。在大小写或空白标准化之后被认为相等的行仅携带原始的左侧文本,因此补丁形文档不是松散匹配下两个输入的逐字节重建。

要点:差异是一个压缩的故事 - 总结阅读顺序并注意 ToolAcre 的文本比较如何显示与突出显示的行相同类型的更改以供快速查看

首先读取两个标签,然后按顺序解释每个带前缀的行。如果您需要渲染行号,请返回浏览器视图。如果您需要完整的标准块,请使用记录合同的工具生成它们。

ToolAcre 提供了一种紧凑的方法来在页面之外进行比较,而无需声称实现每个补丁功能。这个更狭窄的名称(补丁形输出)使期望与确切的功能保持一致,并避免对应用程序兼容性的错误承诺。