文本差异对比
逐行对比两段文本,查看新增、删除的行以及每行内部的改动,并将结果复制为 unified diff。
把工具固定在这里,会保存在此浏览器中。
固定一个工具,它的贴纸就会出现在这里。
逐行对比两段文本,查看新增、删除的行以及每行内部的改动,并将结果复制为 unified diff。
比较时会寻找最短的一组操作:从第一段文本中删除哪些行、添加哪些行,才能把它变成第二段。求这组操作与求最长公共子序列是同一个问题,即两段文本中按相同顺序出现的最长行序列。此工具使用 Eugene Myers 于 1986 年发表的算法,也就是 GNU diff 所用、Git 默认采用的算法,并采用其线性空间版本,因此内存占用与文本大小成正比。
当一个改动块中被删除的行和新增的行位于同一位置时,会再逐词比较这两行,并高亮不同的单词。如果两行几乎没有共同之处,就直接显示为普通的删除和新增,因为几乎整行都高亮反而说明不了什么。
标有 − 的行只存在于原始文本中,标有 + 的行只存在于修改后的文本中。因此一行改动会出现两次:一次删除,一次新增。两列数字分别是该行在原始文本和修改后文本中的行号。含义由标记表达,颜色只是重复同样的信息。
统一视图把所有内容放在一列中,与补丁文件的顺序相同。并排视图让每段文本各占一列,并把相互对应的行对齐。
复制为 unified diff 生成的是 diff -u 和 git diff 的格式。改动按块(hunk)分组,每块前后带有三行未改动的上下文。每个块以类似 @@ -1,7 +1,8 @@ 的头部开始,意思是:原始文本从第 1 行开始的 7 行,对应修改后文本从第 1 行开始的 8 行。
\ No newline at end of file 这一行是格式的一部分。当文本不以换行符结尾时会出现这一行,以便补丁能精确还原文件。页面上的视图会忽略这一差异,因为看起来完全相同的最后一行不应被报告为改动。
不会。比较由浏览器标签页中的 JavaScript 完成。此工具不会用你粘贴的内容发出任何网络请求,网站的安全策略也会阻止向其他任何主机发出请求。
差异通常是看不见的:行尾的空格、用制表符代替了空格、不换行空格,或者一个带重音的字母以两个字符而不是一个字符存储。打开忽略空白差异的选项,即可排除前三种情况。
可以。把它保存为文件,然后运行 patch 并指定要修改的文件名,例如:patch notes.txt changes.diff。如果复制 diff 时打开了某个忽略选项,被忽略的差异不会包含在内,因此打补丁后的文件不会与修改后的文本完全一致。
几千行的文本不到一秒就能比较完成。页面最多显示 5,000 行,而复制的 diff 始终包含所有改动。对于两段几乎没有共同之处的超长文本,搜索会提前结束,结果可能比实际需要的更长。
它会在独立窗口中打开,离线时也能使用。
要安装,请点按“分享”按钮,然后选择“添加到主屏幕”。