文本差异对比
逐行比较两段文本,高亮显示新增、删除和未更改的行 — 全程在浏览器中完成。
输入
结果
什么是文本差异?
文本差异(diff)是两段文本之间的比较,显示哪些内容被新增、删除和保持不变。"diff" 一词源自 "difference"(差异),这种格式自 20 世纪 70 年代起就是编程领域的标配。差异算法不再让你用肉眼逐行对照两份文档寻找改动,而是将它们对齐并标记每一处不同的行,让审阅者一眼看清具体编辑。
典型的差异会为每一行加上前缀:加号(+)表示仅在新版本中存在的行,减号(-)表示仅在旧版本中存在的行,空格表示完全相同的行。这种紧凑的记法让一页内容就能呈现一次编辑的完整历史,也是你所见到的每个代码审查工具、补丁文件和合并请求的基础。
常见的差异算法
有多种算法可以生成差异,它们的主要区别在于如何寻找两段文本之间最长的匹配行序列。经典的 Hunt–McIlroy 算法构建最长公共子序列(LCS),将子序列之外的内容视为新增或删除。这正是最初的 Unix diff 命令所使用的方法,能产生干净、最小化且易于阅读的输出。
较新的变体针对不同目标进行优化。Git 使用的 Myers 算法寻找最短编辑脚本,在典型源代码上速度极快。直方图和 patience 算法尝试保持"锚点"行(如函数签名)稳定,从而产生更符合程序员思维方式的差异。本工具采用基于 LCS 的方法,易于推理,对散文、配置文件和源代码同样适用。
何时使用差异对比工具
许多日常场景都适合使用差异对比工具来节省时间并避免出错,最常见的包括:
- 审阅编辑。 粘贴合同、文章或邮件的前后版本,查看具体改动,确保没有任何编辑被遗漏。
- 比较配置文件。 在排查为何一个环境与另一个环境行为不同时,找出两个版本设置文件之间的差异。
- 检查学生作业。 将提交的论文与早期草稿对比,查看论证如何演变。
- 合并笔记。 当两人离线编辑同一文档时,差异显示各自新增的内容,便于有意识地合并。
- 审计数据导出。 对比两个 CSV 或 JSON 导出文件,找出哪些行或键在导出之间发生了变化。
凡是需要理解两段文本之间差距——不仅是它们是否相等,而是差异在哪里、如何不同——差异对比工具都是正确的选择。
版本控制中的差异
Git、Mercurial 和 Subversion 等版本控制系统都围绕差异构建。每次提交都存储为快照,但系统向你展示的是快照之间的差异,以便审查一次改动实际做了什么。拉取请求和合并请求本质上就是由人类在批准前阅读的差异。你在本工具中看到的同样记法——新增行绿色、删除行红色——正是代码审查者整日盯着的内容。
由于差异在协作中如此核心,学会阅读它是任何编写代码或处理结构化文本之人的核心技能。好的差异让改动自带文档:新增行显示作者的意图,删除行显示他们替换了什么,周围未更改的行提供使改动可理解的上下文。本工具让你对任意两段文本获得同样的清晰度,无需版本库。
如何比较两段文本
使用本工具比较两段文本只需几秒,且完全在浏览器中运行。请按以下三步操作:
- 粘贴原始文本。 将第一版文本粘贴到左侧的"原始文本"框中。
- 粘贴修改后文本。 将第二版粘贴到"修改后文本"框中。
- 比较。 点击"比较"并阅读右侧结果:绿色行是新增,红色行是删除,灰色行是未更改。点击"复制"可将差异复制为纯文本。
由于比较以纯 JavaScript 在你自己的设备上运行,文本永远不会离开浏览器。这使工具适用于机密文档、合同和无法上传至第三方服务的源代码。
这个差异对比工具免费吗?
完全免费,无需注册,无水印,除设备内存外无任何限制。
我的文本会被上传到服务器吗?
不会。比较完全以 JavaScript 在浏览器中运行,文本永远不会离开你的设备,因此适用于机密文档。
它使用什么算法?
使用最长公共子序列(LCS)算法,与经典 Unix diff 属于同一族。它寻找最长的匹配行序列,将其余内容标记为新增或删除。
能处理大文本吗?
可轻松处理数千行。由于 LCS 算法内存占用与两侧行数的乘积成正比,超大输入可能变慢,但日常文档、源文件和配置都能即时比较。