简体中文

开发者工具·文本比较

为什么差异将移动的段落显示为已删除并再次添加

· 工作原理

文本差异 代码审查 开发人员工作流程

一个块离开一个位置并在第二个有序列表中出现在较低的位置
原始 ToolAcre 矢量图

解释为什么基于行的比较没有移动的概念,重新定位的块如何出现在输出中,以及查看重新组织的文档的实用方法。

您移动了一个部分,差异变为红色和绿色 — 描述了小规模重组后出现大差异的惊喜

移动一个部分可以在其旧位置附近创建一个大的红色块,并在其新位置附近创建一个同样大的绿色块。这些话可能没有被触及。改变的是它们相对于周围行的顺序,并且顺序是行 diff 比较序列的一部分。

一旦您不再期待“移动”操作,此输出就更容易信任。 ToolAcre 仅发出相等、删除和添加行。审阅者可以识别两个位置处的匹配块,但程序不会用箭头将它们连接起来,也不会断言一个块是从另一个位置复制的。

行差异仅知道保留、删除和插入 — 解释该算法以相同的顺序查找两个版本共有的行,因此顺序更改会破坏匹配

LCS 以相同的相对顺序保留两个版本中出现的行。如果 Beta 部分在左侧位于 Gamma 之前,但在右侧位于 Gamma 之后,则这些块之一不能保留在所选公共子序列中。它必须离开并重新进入编辑故事。

更改的行用相同的原始词汇表示:删除旧行并添加新行。这种简单性使行号和计数保持准确。这也意味着远处删除的块和添加的块之间的视觉相似性是审阅者的观察结果,而不是算法的键入结果。

为什么保持顺序是重点——表明允许无序匹配会使结果不明确并且计算速度慢得多

有序匹配是此实现使用的定义。允许任意无序配对将回答不同的问题,并且需要重复、部分编辑和竞争目的地的规则。该存储库不会对此类替代方案进行基准测试,因此本文不会进行不受支持的性能比较。

秩序的实际好处是对稳定邻居的明确解读。相同的前缀和后缀行锚定更改的中间,并且每个发出的行都推进已知的一侧。即使存在联系,重建仍然是两个文档的连贯路径,而不是一堆相似的线条。

保留顺序定义LCS匹配;该来源并不能证明移动的普遍速度损失

获取包含介绍、安装、配置和许可证部分的自述文件,然后将配置放在安装之前。一个区块内的线路将在原始位置被删除,并在目的地附近添加,而 LCS 保留的任何一个排序保持不变。

在移动的块内添加一个措辞编辑,该对在视觉上不再相同。直接比较块文本,而不是假设每条绿线只是重新定位。原始的基于 1 的行号可帮助您找到两个副本并确认内容在移动过程中是否发生更改。

在实践中审查动作 — 建议分两遍进行比较:首先将各部分恢复到原始顺序以捕捉编辑,然后分别确认动作

为了仔细检查,首先在临时副本中恢复原始部分顺序并比较措辞。该通道隔离了块内的编辑。然后比较真实的重新排序版本以确认放置。两个狭窄的问题比结合搬迁和修订的一个屏幕更容易回答。

不通过仅匹配长块的第一行和最后一行来批准。重复的标题、空白行或重复的示例可能会产生误导性的视觉对。检查完整删除和添加的范围,包括标点符号、大小写以及活动选项可能标准化的任何空格。

一些版本控制工具如何近似移动检测 — 将 git 中的颜色编码移动线启发式描述为后处理步骤,而不是 diff 本身的一部分

一些评论产品可能会在基本差异之后添加移动行表示,但 ToolAcre 不包含此类传递。它的来源没有相似性阈值、块指纹或移动行类型。在没有来源的情况下命名另一个产品的启发式方法会模糊该工具中的有用边界。

这里可防御的技术是手动配对。折叠长时间未更改的运行以使更改的区域更接近,然后检查重复的文本。折叠功能仅用跳过标记替换长的相等运行;它不会改变潜在的结果或推断变化之间的关系。

其他工具中的移动检测行为不在该存储库的证据范围内

文本差异不会合并版本、保留作者身份、推断意图或识别重命名。它无法判断重复块是否被移动、复制或独立重新创建。这些结论需要两个粘贴状态所不具备的历史或领域证据。

它也不解析 Markdown 结构。标题标记只是线条的一部分。当提交历史很重要时,请使用存储库审查,并使用此浏览器视图作为针对两个具体状态的第二意见,而不是作为出处的替代品。

要点:将棋子作为一对阅读 — 总结了如何发现匹配的棋子对,并使用基于浏览器的工具快速第二遍,而无需上传文档

当重新排序填满屏幕时,查找具有相同原始文本的已删除范围和已添加范围。将它们视为候选对,然后在该对中搜索真正的编辑。这种阅读方法尊重直线算法所证明的内容以及只有人类才能推断的内容。

由于比较和渲染保留在加载的工具模块中,因此无需文本处理请求即可检查草稿。仅粘贴适合您的浏览器环境的材料,进行比较,完成后清除编辑器;该工具本身不公开已保存的比较历史记录。