這個頁面的程式碼沒跑起來。

直接從資料夾裡開啟 index.html,瀏覽器會攔下 JavaScript 模組,於是你選好一個檔案之後,頁面不會有任何反應。改用 http 把這個資料夾提供出去:

powershell -ExecutionPolicy Bypass -File serve.ps1

然後開啟 http://localhost:8080/。

文字比對 — 兩段文字,並排比較

兩段文字進來,每處差異都被標出來,逐行、逐詞。沒有一個字被貼進別人的伺服器。

語言: 繁體中文
檢視原始碼
你的文字不會上傳。這裡根本沒有伺服器。

一次比對就是對兩串字元做算術,就在這個頁面裡做完。演算法是 Myers 的那一個——和 git diff 用的是同一個——手寫在 src/diff.js 裡,你可以去讀。這個工具沒有任何形式的網路功能,沒有什麼可取,也沒有什麼可發。這一點在這裡格外要緊:人們比對的,是合同、配置檔案和尚未釋出的程式碼,而且總是成對出現。

即時檢查: 檢查中…

離線: 檢查中…

不用信我們說的。開啟開發者工具,盯著「網路」面板,隨便比對點什麼。沒有哪個請求帶走你貼進去的一個字元。嫌麻煩就直接拔掉網線,照樣比對。

1 貼上兩段文字

空的
空的

2 選好怎麼讀

3 讀一讀改了什麼

還沒有結果。

以 Markdown 檢視

怎樣在不上傳的前提下比對兩段文字

  1. 貼上兩段文字,或者拖進兩個檔案。原文在左,改過的在右。同時拖到選擇框上的兩個檔案會按你放下的順序各落一邊;放反了就把兩邊換過來。
  2. 選好怎麼讀。並排,或者單列。手機上從單列開始,因為並排需要兩欄文字,而手機差不多隻裝得下一欄;反正選單就在旁邊。
  3. 忽略無關緊要的。空白、大小寫、空行——每一樣都可以單獨忽略,免得一個只是重新排版過的檔案讀起來像改了一百處。預設把沒變的中段摺疊成一個數字,每處改動兩側各留三行。
  4. 讀一讀改了什麼。刪掉的行標在左邊,新增的行標在右邊;改動行內部,不同的詞會被高亮——兩段文字的比對顯示的是挪動的那個詞,而不是兩整段。
  5. 把補丁帶走。下載下來的是統一格式的 .patch,程式碼評審、git apply 和所有差異檢視器認的就是它。複製會把同樣的內容放進剪貼簿。

說得更細的版本

怎樣比對兩個 JSON 檔案 兩個檔案用同一種方式格式化,鍵排好序,再比對。為什麼生比 JSON 幾乎全是噪音,怎麼在瀏覽器裡把兩邊化成規範形,以及什麼能一路留到補丁裡。

常見問題

我的文字會被傳到哪裡去嗎?

不會。比對是在你自己的瀏覽器裡、你自己的硬體上執行的函式。這個工具沒有任何形式的網路功能:它從不去取什麼,也從不發出什麼;頁面的 Content-Security-Policy 裡寫著它允許聯絡的每一個地址,沒有一個屬於本站。這正是拿它來處理合同、配置檔案或未釋出程式碼的理由:把這類東西貼進別人的比對器,等於把兩個版本一次全交了出去。

這個比對到底在做什麼?

它找出把左邊那段文字變成右邊那段所需的最短一組編輯,用的是 Myers 演算法——git diff 用的那個。最短,正是讓差異讀得下去的關鍵:在中間插入一行,就該顯示為一次插入,而不是後面每一行都變了。在改動行的內部,不同的詞也會被標出來,所以比較兩段文字時看到的是挪動的那個詞,而不是整整兩段。

能比對兩個檔案,而不是兩段貼上嗎?

能。把兩個同時拖到選擇框上,它們會按你放下的順序各落一邊。讀它們的是你的瀏覽器,讀進這個頁面,而這也是它們唯一去的地方。要是放反了,把兩邊換過來就行。

比對會輸出什麼,我能應用它嗎?

下載的是一份 unified diff,也就是 @@ -3,5 +3,5 @@ 那種格式,git apply、patch 和所有程式碼評審工具都讀得懂。複製則是把同樣的東西放進剪貼簿。螢幕上看到的只是它的一種呈現:左右並排,或者單列,未改動的部分摺疊成一個計數,除非你要求全部展開。

能忽略空白、大小寫或空行嗎?

能,每一樣單獨控制。忽略空白後,只是重新排版過的檔案會被比對成沒有變化;忽略大小寫會把 Error 和 error 當成同一個詞;忽略空行會跳過什麼都不裝的行。這時結果上方的計數會說:把你要求忽略的差異忽略之後,兩邊是一樣的——這和「完全相同」不是同一個論斷,頁面把兩個論斷分得清清楚楚。

它能處理多大的比對?

這裡沒有設上限,因為沒有哪臺伺服器在為上限掏錢。兩萬行的兩段文字只改了幾處,眨眼就比完了,因為共同的開頭和結尾在真正運作之前就被裁掉了。兩段毫無共同之處的文字比對會提前停下並說明,而不是花一分鐘去證明本來就明擺著的事;而非常長的比對會畫出前幾千行,其餘交給下載下來的補丁。

它免費嗎,需要註冊嗎?

免費,沒有帳號,不用登入,沒有試用期,貼多少也沒有上限。本站帶廣告,經費就是從那裡來的,廣告拿不到任何關於你文字的資訊。

斷網能用嗎?

能。頁面載入一次之後斷開網路,它照樣運作。這也是證明「什麼都沒上傳」最省事的辦法,真要把你的文字送出去比對,拔線那一刻就停了。