如何找出两个版本文本之间的改动
要找出两个版本之间的改动,把两段内容分别粘贴到对比工具中即可。工具会将两段文本对齐,列出不同的行,并在每对不同的行中标出改动的词。无论是代码还是文章都适用:长段落中改动的一个词会很醒目,其余内容则保持不变。
对比文本两个版本之间改了哪些内容?免费使用对比的原理
对比(diff)会寻找最长公共子序列(LCS):即两个版本中以相同顺序出现的最长一串内容。这些内容不必彼此相邻。公共部分保持不变,其余部分要么是新增的(只出现在新版本中),要么是删除的(只出现在旧版本中)。
举个简单的例子。旧文本是“A B C D”,新文本是“A C X D”。最长的公共序列是“A C D”,因此 B 是删除的内容,X 是新增的内容。对比工具处理长文档时也是这样做的,所以它能给出精确的改动清单,而不是把两段文本并排摆放让你自己比对。
行与词
- 按行对比适合代码、配置文件、列表以及每行一个条目的内容。一处改动的行会显示为一行删除加一行新增。
- 按词对比适合文章、合同以及各类正文。在每对改动的行中,对比工具只标出真正改动的词,因此只改了一个词的句子不会看起来像整句被重写。
实例:一个关键的词
来看一个条款的两个版本:
- 旧版:“供应商应在订单下达后 14 天内交付货物。”
- 新版:“供应商可以在订单下达后 30 天内交付货物。”
在对比工具中,这个句子显示为一行删除、一行新增。被标出的词清楚地显示了两处改动:“应”变成了“可以”,“14”变成了“30”。句子其余部分没有变化。第一处改动改变了含义:原本的义务变成了选择,所以要仔细看被标出的词。
忽略空白和大小写
空白和大小写的差异常常掩盖真正的改动,因此工具提供了相应的复选框:
- 只有空格变化时,勾选忽略空白,例如编辑器添加的行末空格。
- 列表由多人录入时,勾选忽略大小写。但在大小写有意义的地方不要忽略,例如配置项的键名,或 Linux 上的文件名。
- 勾选仅显示改动行,可以在较长的对比结果中隐藏未改动的文本。
例如,如果忽略大小写,“Total: 100”和“total: 100”的内容相同。但在键名区分大小写的文件中,它们是两个不同的设置,因此那里不能忽略大小写。
在 fixmint 中操作
- 把较早的版本粘贴到原文中,把较新的版本粘贴到修改后中。
- 只有在这些差异不影响你的检查时,才勾选忽略空白或忽略大小写。
- 先看改动的行,再看行内被标出的词。
- 勾选仅显示改动行,在较长的对比结果中隐藏未改动的文本。
- 点击复制差异保存结果。
特殊情况
- 段落移动。 对比会保留原有顺序,因此移动过位置的段落会在一处显示为删除,在另一处显示为新增。可以肉眼查找,也可以把两个部分分开对比。
- 重新排版的文本。 如果新版本按不同宽度重新换行,按行对比会报出并不存在的改动。先用修复粘贴的文本把行合并,再进行对比。换行指南解释了相关规则。
- 隐藏字符。 不可见字符即使看不出任何可见变化,也会显示为改动。对比前请先删除它们。
- 大幅改写。 当几乎所有内容都变了,对比结果很难阅读。请一次只对比一个部分。
如何读懂结果
先看删除的内容,再看新增的内容。优先检查数字、日期、名称和否定词,因为一个数字的改动可能比整页的措辞调整更重要。在合同的例子中,一个 12 个字的句子里改了两个词,属于小幅修改,被标出的词也便于发现。如果你在对比自己写的两个版本,字数对比还可以告诉你新版本是变长了还是变短了。
如果两个版本来自不同的人,请给它们加上标签,例如“草稿 3”和“草稿 4”,并保持较早的文件不变。按从上到下的顺序阅读改动,可以看清论证或条款在各次修改中是如何变化的。这比只找最大的改动要慢,但更不容易漏掉细小的改动。
按行对比不适合结构化数据:在这类数据中,一个单元格的改动可能导致整行乃至之后的所有行发生位移。请用对比两个表格逐个单元格比较,或用对比两个 JSON 文件逐个键比较,这样得到的改动清单才与数据结构对应。
快速问答
什么是 diff?
diff 是两个版本之间新增和删除内容的清单,根据两个版本共有的最长序列计算得出。
应该按行还是按词对比?
代码和列表按行对比,因为每一行都是独立的条目。文章按词对比,因为一个段落中可能只有某个句子的一部分发生了改动。
为什么 diff 会把整段都标为改动?
通常是因为换行、空格或隐藏字符不同。忽略空白、重新排版文本或删除隐藏字符后,再重新对比即可。
由 AI 辅助翻译自英文原文。
评论
还没有评论。快来抢沙发。


