文本对比工具
逐行比较两段文本或代码片段。新增、删除和修改的行都会被高亮显示,精确到具体不同的单词。
在浏览器中运行无需注册不上传任何数据
在两个输入框中粘贴文本即可查看差异。
如何使用文本对比工具
- 在左侧粘贴原始文本,在右侧粘贴修改后的文本,或打开两个文件。
- 比较结果会随输入实时更新。选择并排或合并视图。
- 勾选忽略空白、忽略大小写或忽略空行,可以隐藏重新缩进之类的干扰。
- 使用隐藏未修改聚焦于变更,每处变更周围保留三行上下文。
- 点击复制为 patch或下载 .diff,即可得到标准的统一 diff,可用
git apply或patch应用。
这个对比工具是如何工作的
本工具把两份输入拆分成行,并运行 Myers 差异算法,这也是 git diff 和 GNU diff 使用的 O(ND) 算法。它会找出把原始文本变为修改后文本所需的最短插入和删除序列,因此结果显示的变更行数最少。开头和结尾相同的行会被先行跳过,即使比较数千行的文件也几乎是瞬间完成。
当一条删除行和一条新增行相邻时,它们会被配对为一条修改行,并再按单词进行一次对比。真正改变的单词会以更醒目的颜色高亮,因此即使在很长的一行中,被重命名的变量或被修改的数字也一目了然。
并排视图与合并视图
并排视图把原始版本放在左边、新版本放在右边,两边都带有行号。审阅文字、配置文件和较小的代码改动时,这是最直观的视图。合并视图把删除行(-)和新增行(+)交错显示在一列中,这也是代码审查工具和 patch 文件使用的格式。
统一 diff(patch)格式
导出的 patch 遵循 diff -u 格式:先是 ---/+++ 文件头,然后是以 @@ -l,s +l,s @@ 开头的区块(hunk),其中 l 是起始行号,s 是该区块在各文件中的行数。每个区块包含三行未修改的上下文,因此即使附近的行发生了移动,也能用 patch -p0 或 git apply 应用。
何时使用忽略选项
- 忽略空白会把只在空格或制表符上不同的行视为相同。适合在重新缩进代码或把制表符换成空格之后使用。
- 忽略大小写适用于大小写无关紧要的 SQL、HTML 和日志文件。
- 忽略空行会隐藏那些仅为排版而新增或删除的空行。
常见问题
我的文本会被上传到任何地方吗?
不会。比较完全由 JavaScript 在你的浏览器中完成。你粘贴的任何内容都不会发送到服务器,因此可以放心比较私有代码、合同或配置文件。
文本最大可以有多大?
在普通笔记本电脑上,数万行的文件也能在一秒内完成比较。由于算法开销随差异数量增长,两个巨大且完全不同的文件耗时最长。
可以直接比较两个文件而不是粘贴吗?
可以。使用每个输入框上方的打开文件按钮加载本地文件。文件由你的浏览器读取,永远不会被上传。
为什么某一行显示为删除加新增,而不是修改?
只有当一组删除行紧挨着一组新增行时,它们才会被配对为“修改”。如果两行的共同文本很少,就会跳过单词级高亮,因为那样反而比把整行显示为变更更杂乱。
如何比较 JSON 对象?
请使用 JSON 对比工具。它比较的是解析后的结构,因此键顺序和格式不会造成误报,并且会列出发生变化的确切路径。