文本对比工具 把两段文本(代码、合同、日志、配置)行对行高亮显示新增、删除、修改,支持忽略空白、字符级精细对比、左右分栏/上下统一两种视图。
两种视图模式:
主流 diff 算法:
| 算法 | 时间复杂度 | 特点 | 用途 |
|---|---|---|---|
| Myers | O((N+M)D) | 经典,差异越少越快 | Git、GNU diff |
| Patience | O(N log N) | 唯一行优先匹配,结果更”人类友好” | Git 可选 |
| Histogram | 类似 Patience,但更快 | Git 默认(新版)、JGit 默认 | |
| LCS(最长公共子序列) | O(NM) | 算法基础,纯算法用 | 教学 |
与 IDE diff 的区别:IDE diff 集成在编辑器里,能跳到对应行;在线 diff 适合临时对比——同事发来的两版内容、不在仓库里的临时文件、跨语言对比(IDE 有时不识别全部)。
实战提示:
行级 diff 以整行为单位标记新增/删除/未变(Git diff 默认就是行级),快但粗——同一行只改一个字也会显示"删除整行+新增整行"。字符级 diff 在变化的行内进一步定位到具体字符,更精细但慢,适合短文本(合同条款、配置值)。本工具支持两种切换。
三种常见原因——换行符(CRLF vs LF):Windows 复制的文本可能整体不同;空白字符(tab vs 空格、行尾空格):肉眼看不出但 diff 严格区分;编码(UTF-8 vs GBK):中文字节序列不同。多数 diff 工具有"忽略空白"开关,对比代码时可开启。
Myers 算法(1986)是行级 diff 的经典算法,时间复杂度 O((N+M)D),N、M 是两文本行数、D 是差异数量。差异越少越快——这正符合 Git 的常见场景(每次提交只改几行)。Git、`diff` 命令、GitHub PR 视图都用 Myers 或其变体(如 Histogram、Patience)。
diff 是 A 和 B 之间找差异;merge 是 A、B、共同祖先 C 三方合并。Git merge 看 A、B 各自相对 C 改了什么,判断哪些改动可自动合并、哪些是冲突。两方 diff 无法判断"是 A 加了一行还是 B 删了一行",三方 merge 看共同祖先就清楚了。
可以——这就是 patch 文件 的用途。`diff -u old new > change.patch` 生成统一格式补丁,`patch < change.patch` 应用回原文件。Git 的 `git apply` 接受同类格式。这是开源邮件列表协作的传统方式(Linux 内核仍用 patch),Web 化后才被 PR 取代。
浏览器 diff 在 5000+ 行或 1MB+ 时性能会下降。优化思路——先按段切(按 `## 二级标题` 或函数定义),每段单独对比;关掉字符级只用行级;Web Worker 异步算(专业 diff 工具常用)。本工具会在超大文本时退化为简化算法保证响应。