文本对比
两个文件版本之间到底有哪些不同,一目了然。
- 全部免费不用注册、没有次数限制、没有付费档。
- 什么都不上传文件在你自己的设备上处理,不会到服务器上去。
- 结果不打折没有水印,不降质,不限文件大小。
- 改动都写下来每一次修复、每一个新工具,都记在更新日志页面上。
这个工具能做什么
一边贴一个版本——左右哪边是哪个由你定——或者把文件拖到任意一个框里,差异就在框的位置显示出来:删掉的行在左边标红,新增的行在右边标绿,改动的行里再把不一样的那几个词标出来。行级比较用的是和 git 一样的思路:两边都只出现一次的行当锚点,中间的空隙交给 Myers 算法,所以一个 10 万行、只改了几处的日志,在你自己的设备上零点几秒就比完。
两种视图,三种精度。「并排」把两个版本放成两栏,各带自己的行号;「合并」是 git 和代码评审工具用的单栏格式,用 − 和 + 做前缀。精度决定改动行怎么高亮:「行」整行标出,「词」标出不一样的词(默认),「字符」精确到单个字符——比对哈希、标识符和数字时用它。什么都不离开你的浏览器:不上传、不生成链接、不需要账号。
使用方法
在两个框里输入或粘贴,或者点任一侧的「选择文件」,文件名会显示在那一侧的头部,也用在 diff 的头部,不用记左右各是哪个文件。结果直接替换掉两个框;「编辑」把框换回来,双击结果里的某一行则直接回到那一行去改。「交换」把两侧对调,「载入示例」用一小段配置填满两边,让你先看看结果长什么样。框下面那一行是开关:「忽略大小写」把 A 和 a 当成一样;「忽略空白」把连续的空格和制表符压成一个,并忽略行首行尾的空白,重新排版过的代码就该勾上它;「只看差异」把连续相同的行折叠成上下各三行,中间一条横条,点一下展开。
结果上方那一行统计新增、删除的行数和改动块的数量。‹ › 在改动块之间跳——结果区有焦点时按 n 和 p 也行——跳到的那一块行号栏会有一条黄色标记。「复制 diff」把标准的 unified diff 放进剪贴板;「下载 .diff」把同样的内容存成文件,git apply 或 patch 直接能用。两侧合计超过 2 MB 时,改成按「比较」按钮,不再每敲一个字就算一遍。
能比较哪些文件
只要底子是文本就行。文档和笔记:.txt、.md,.rtf 按纯文本比,.srt / .vtt 字幕文件。数据导出:两个 JSON 文件、两个 CSV 或 TSV 文件、XML、YAML——看两次接口返回或两份数据库导出之间改了什么最快。配置文件:.ini、.toml、.env、.properties、.conf、Dockerfile、nginx 或 Apache 的配置,弄坏部署的那一项一眼就跳出来。任何语言的源代码:.js、.ts、.py、.go、.java、.c、.cpp、.rs、.php、.sql、.sh,以及 .html 和 .css。补丁和日志:.diff、.patch、.log。Word、PDF、Excel 不是文本文件——内容装在二进制容器里——这里会直接拒绝而不是渲染成乱码,请先另存为纯文本或 CSV。
值得知道的事
diff 是一种选择,不是一个事实:一块行既可以解释成「挪了位置」,也可以解释成「删了再加」,任何算法都得选一种读法,两个工具对同一处改动给出不同的画面很正常。这个工具偏向让唯一的行对齐的那种读法,和 git 的习惯一致。「忽略空白」比较时把空白压掉,结果里显示的仍是原来的空格。太长的单行——压缩过的 JavaScript、一行的 JSON 导出——超过 4000 字符就只按整行比,因为一行 200 KB 逐词比出来的东西没人读得了。结果表最多画 8000 行,再多请勾「只看差异」或下载 .diff,.diff 永远是完整的。文件载入前会检查:含二进制内容的、超过 20 MB 的,都会给一句提示而不是渲染成乱码。
背景:diff 从哪来
diff 程序 1974 年随 Unix 发布,作者是 Douglas McIlroy 和 James Hunt,它的输出格式——用 < 和 > 做前缀的行——至今仍是 diff 命令默认打印的样子。用 − 和 + 做前缀、带 @@ 块头的 unified 格式由 Wayne Davison 在 1990 年提出,随后被 GNU diff 采纳,成了补丁的通用语言:git show、GitHub 的 pull request、所有代码评审工具显示的都是它。Eugene Myers 1986 年发表了 O(ND) 差分算法,它找的是最短编辑脚本,是 GNU diff、git 和多数编辑器的核心。Bram Cohen 在 2004 年前后描述了 patience 变体——先用两边各只出现一次的行做锚点,再比中间的空隙——因为在真实代码上它给出的结果更好读。这个工具用的就是 patience 锚点加空隙里的 Myers,复制和下载写的是 unified 格式。
应用领域
签字之前看同事到底改了合同或制度文件的哪几处;比较两次导出的配置,找出那条弄坏部署的设置;对比一次正常、一次失败的两份日志;把生成的文件和上一版对一遍;核对译文是不是漏了原文的哪一行。只要数量不要差异的话,字数统计给出字数、字符数和阅读时间;两段只是简繁不同的文字,先用简繁转换统一再比。在这里下载的 .diff 在任何系统上用 git apply 或 patch 都能打上。
常见问题
我的文本会上传到哪里吗?
不会。比较在你的浏览器里进行,什么都不发送、不保存、不生成链接。关掉标签页就没了。
「忽略空白」具体做什么?
比较时把连续的空格和制表符算作一个空格,去掉行首行尾的空白。结果里显示的仍是原来的空格。只改了缩进的行就不会出现在差异里。
能直接比较两个文件而不是粘贴吗?
能。在两侧各点「选择文件」,或者把文件拖到框上。任何文本文件都行——.txt、.md、.json、.csv、.log、源代码。二进制文件和超过 20 MB 的文件会被拒绝。
能比较哪些类型的文件?
任何文本文件:.txt、.md、.json、.csv、.xml、.yaml、.ini、.env、.log、.diff,以及任何语言的源代码。Word、PDF、Excel 是二进制容器,会被拒绝——请先另存为纯文本或 CSV。
下载的 .diff 是什么?
标准的 unified diff,git 和 patch 用的格式。对原文件执行 git apply changes.diff 就得到修改后的版本。
切到「字符」后高亮为什么变了?
「词」精度标整个词;「字符」精度只标不一样的那几个字符。改了一个标识符或哈希时字符视图更紧凑;读文章时词视图更顺眼。