看清两个版本之间到底改了什么。
比较两段文本或同一文件的两个版本,看清究竟改了什么:对齐的双栏、每一行内被改写的词单独高亮,以及可直接应用的统一格式补丁。
尚未进行比较
左右各放一个版本,然后按“比较”。一切都在这个标签页里完成,不会上传任何内容。
工作方式
把两个版本放进来
粘贴、拖入两个文件,或者让另一个工具把其中一个递过来。什么都不会上传,此时也还没有开始比较。
决定什么才算改动
按行、按词还是按字符;要不要忽略缩进、大小写或空行。定好之后再按“比较”,费力的那一步只在你开口时才跑。
读结果
对齐的双栏里,被改写的词单独浮现,未动过的段落折叠收起,一个按键跳到下一处改动。
带走结果
一份 git apply 认得的统一格式补丁、一份可独立打开的 HTML 报告,或者把修订后的文本直接送进另一个工具。
Myers 算法,线性内存
经典的 O(ND) 算法配上分治改良。无论两个文件差得多远,内存占用都保持平稳:5000 行的比较约 7 毫秒,而朴素的 LCS 矩阵要花 590 毫秒和 200 MB。
词级高亮
被改写的行会再比一遍,逐词对照,于是亮起来的是真正挪动过的那三个字符,而不是一整块红对着一整块绿。
缩进可以不算数
把文件重新缩进一遍,逐字比较会判定每一行都不同。忽略行尾空格、所有空白、大小写或空行,剩下的才是真正的改动。
未动过的段落会折叠
一个 4000 行文件里改了一处,不该逼你翻完 4000 行。保留 1 行、3 行或 8 行上下文,任何折叠段落点一下就展开。
对应关系可以自己钉住
当两段移动过的内容配错了对,在左右各点一个行号就能把它们钉在一起。此后图钉两侧各自独立求解,一处修正绝不会打乱其余部分。
语法配色不会被盖掉
二十二种语法,只在文件确实需要时才加载。字符串里被改动的词既保留字符串的颜色,又加上改动的底色,而不是其中一个把另一个抹掉。
真正能打上的补丁
标准的统一格式差分输出,块头信息完全正确,git apply 和 patch 都认。也可以导出一份自成一体的 HTML 报告,没有字体、脚本或任何需要托管的资源。
大文件依然顺手
大规模比较会移到 Web Worker,编辑器保持响应;只有屏幕上的行才会真正生成;撤销记录保存的是改动过的字符,而不是整份文档的副本。
看清两个版本之间到底改了什么。
真正需要做差分的东西,往往正是不能外传的:带着凭据的配置、尚未签署的合同、医疗数据导出、竞争对手的报价。DiffSnap 在这个标签页里完成计算,因此两份文档都留在你打开它们的那台机器上。
Myers 算法,跑在你自己的机器上
这里的比较采用 Myers 的 O(ND) 差分算法及其线性内存改良版,用原生 JavaScript 写成,运行在你自己的设备上。没有上传环节,没有后端,也没有任何携带你文本的请求:页面加载完之后断网,一切照常可用。
为人们真正会去比较的那类文件而做的对比工具。
在上线前核对同事改动了配置里的哪一处;找出合同两版草稿之间挪了位置的条款;证明译文和它所依据的原文一一对应;在没有装 git 的机器上审阅补丁;以及弄清两份导出里哪一份才是最新的。
值得拿来做差分的文档很少是公开的:写着密钥的环境文件、保密协议下的约定、含有客户资料的导出。把这些粘进托管的比较服务,等于把两个版本原封不动交给别人的服务器。在这里它们从不离开标签页,也就没有什么可记录、可缓存、可泄露的。
常见问题
Q它能比较多大的文件?+
最大可打开 32 MB 的文件;超过 512 KB 的会先等你点一下,而不是不打招呼就灌进编辑器。超过大约 12 万字符后,比较会转到 Web Worker,页面继续保持响应。两个几乎毫无共同之处的文件会触及工作量上限,被判定为整段重写——工具会在界面上说明,而不是假装无事发生。
Q我的文件会被发到服务器吗?+
不会。这里既没有上传也没有后端:比较、着色和所有导出都在你的浏览器标签页里运行。页面加载完成后即使断网也能继续使用。
Q我只是重新缩进了一下,为什么显示全都改了?+
因为默认每个字符都算数,包括空格和制表符。把空白选项切到“忽略所有空白”,剩下的就只有真正的改动了。大小写和空行也有对应的选项。
Q它会做语法高亮吗?+
会——二十二种语法,根据文件扩展名或文本的形态判断,并且只在某次比较确实需要时才加载。语法配色和改动词高亮是一起绘制的,谁也不会遮住谁。
Q结果可以导出吗?+
可以。块头信息正确、git apply 和 patch 都认的统一格式 .patch;不依赖任何外部资源、可独立打开的 HTML 报告;供提交信息或工单使用的纯文本摘要;以及单独的修订后文本。
Q两个版本对齐错了,我能纠正吗?+
可以。在一侧点击某个行号,再点另一侧应当与之对应的那一行,这一对就被钉住了。每个图钉之前和之后的内容都各自独立比较,因此一处纠正绝不会带偏文件的其余部分。