文字比對
兩個檔案版本之間到底有哪些不同,一目了然。
- 全部免費不用註冊、沒有次數限制、沒有付費檔。
- 什麼都不上傳檔案在你自己的裝置上處理,不會送到伺服器。
- 結果不打折沒有浮水印,不降質,不限檔案大小。
- 改動都寫下來每一次修復、每一個新工具,都記在更新日誌頁面上。
這個工具能做什麼
一邊貼一個版本——左右哪邊是哪個由你定——或者把檔案拖到任一個框裡,差異就在框的位置顯示出來:刪掉的行在左邊標紅,新增的行在右邊標綠,改動的行裡再把不一樣的那幾個詞標出來。行級比較用的是和 git 一樣的思路:兩邊都只出現一次的行當錨點,中間的空隙交給 Myers 演算法,所以一個 10 萬行、只改了幾處的日誌,在你自己的裝置上零點幾秒就比完。
兩種檢視,三種精度。「並排」把兩個版本放成兩欄,各帶自己的行號;「合併」是 git 和程式碼審查工具用的單欄格式,用 − 和 + 做前綴。精度決定改動行怎麼標示:「行」整行標出,「詞」標出不一樣的詞(預設),「字元」精確到單一字元——比對雜湊、識別字和數字時用它。什麼都不離開你的瀏覽器:不上傳、不產生連結、不需要帳號。
使用方法
在兩個框裡輸入或貼上,或者點任一側的「選擇檔案」,檔名會顯示在那一側的標頭,也用在 diff 的標頭,不用記左右各是哪個檔案。結果直接取代兩個框;「編輯」把框換回來,雙擊結果裡的某一行則直接回到那一行去改。「交換」把兩側對調,「載入範例」用一小段設定填滿兩邊,讓你先看看結果長什麼樣。框下面那一列是開關:「忽略大小寫」把 A 和 a 當成一樣;「忽略空白」把連續的空格和 Tab 壓成一個,並忽略行首行尾的空白,重新排版過的程式碼就該勾上它;「只看差異」把連續相同的行折疊成上下各三行,中間一條橫條,點一下展開。
結果上方那一列統計新增、刪除的行數和改動區塊的數量。‹ › 在改動區塊之間跳——結果區有焦點時按 n 和 p 也行——跳到的那一塊行號欄會有一條黃色標記。「複製 diff」把標準的 unified diff 放進剪貼簿;「下載 .diff」把同樣的內容存成檔案,git apply 或 patch 直接能用。兩側合計超過 2 MB 時,改成按「比較」按鈕,不再每敲一個字就算一遍。
能比較哪些檔案
只要底子是文字就行。文件和筆記:.txt、.md,.rtf 按純文字比,.srt / .vtt 字幕檔。資料匯出:兩個 JSON 檔、兩個 CSV 或 TSV 檔、XML、YAML——看兩次 API 回應或兩份資料庫匯出之間改了什麼最快。設定檔:.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 都能套用。
常見問題
我的文字會上傳到哪裡嗎?
不會。比較在你的瀏覽器裡進行,什麼都不傳送、不儲存、不產生連結。關掉分頁就沒了。
「忽略空白」具體做什麼?
比較時把連續的空格和 Tab 算作一個空格,去掉行首行尾的空白。結果裡顯示的仍是原來的空格。只改了縮排的行就不會出現在差異裡。
能直接比較兩個檔案而不是貼上嗎?
能。在兩側各點「選擇檔案」,或者把檔案拖到框上。任何文字檔都行——.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 就得到修改後的版本。
切到「字元」後標示為什麼變了?
「詞」精度標整個詞;「字元」精度只標不一樣的那幾個字元。改了一個識別字或雜湊時字元檢視更緊湊;讀文章時詞檢視更順眼。