極速數位工具箱

兩份文字差在哪?用差異比對檢查文稿與設定檔的修改

作者:夢想團隊 ・ 發布日期: ・ 閱讀約 6 分鐘

把原始文字貼在左邊、修改後的文字貼在右邊,按「比對差異」,就會標出新增、刪除與修改的行,還能一處一處往下檢查。這篇用一份虛構的活動通知示範,說明忽略空白、大小寫與空行的效果、行內標示用字詞還是字元,以及怎麼讀懂並匯出 unified diff。

什麼時候用差異比對

只要你手上有「改之前」和「改之後」兩份文字,又不想用眼睛一行一行對,就適合用差異比對:文稿或公告的修訂版、設定檔改了哪幾個值、兩份清單的差異、程式碼的修改。工具只負責把變動標出來,改得對不對、能不能接受,還是要你自己判斷,重要的文件(例如合約)請以原文與專業人員的審閱為準。

步驟

  1. 打開 文字差異比對工具,把原始文字貼到左欄、修改後的文字貼到右欄;也可以按各欄的「開啟檔案」載入(單檔上限 20 MB,編碼會辨識 UTF-8 含 BOM、UTF-16,其餘會試 Big5)。想先看看效果,按「載入範例」。
  2. 設定比對選項(見下一節),按「比對差異」。內容不多時,之後修改文字或選項,結果會自動更新。
  3. 結果區頂端會顯示「新增幾行、刪除幾行、修改幾行」與左右各有幾行,旁邊顯示「共幾處」差異。連在一起的一整塊變動算一處。
  4. 選「並排」或「合併」檢視。「顯示」可以選只看差異附近(前後 3 行或 10 行),或全部內容。窄螢幕(寬度小於 760 px)預設用合併檢視。
  5. 用「↑ 上一個」「↓ 下一個」一處一處檢查,旁邊會顯示「第 1/3 處」。
  6. 需要留存或傳給別人:按「複製 unified diff」、「↓ 下載 .diff」、「↓ 下載 .patch」或「↓ 下載 HTML 報告」。

實測:一份通知的兩個版本

我們寫了一份虛構的「社團活動通知」,原始版有 7 行,修改版有 8 行。修改的內容是:日期從 10 月 12 日改成 19 日、地點從三樓改成二樓、費用從 100 元改成 120 元(含保險)、請攜帶的物品多了雨具,另外新增一行聯絡人。比對的結果是:

並排檢視:左邊紅色是原始版被修改的行,右邊綠色是修改版,行內用深色標出 12 改成 19、三改成二、100 改成 120、新增的含保險與雨具,最後一行聯絡人是新增
並排檢視。左紅右綠;行內再用深色標出實際不同的字。
工具顯示的結果(耗時 18 毫秒,會因裝置而不同)。
項目數值
新增1 行
刪除0 行
修改4 行
左右行數左 7 行/右 8 行
差異處數3 處

為什麼 5 行變動只算 3 處?因為連在一起的變動算一處:日期與地點是相鄰的兩行(1 處),費用與請攜帶是相鄰的兩行(1 處),最後新增的聯絡人是另一處(1 處)。換成「合併」檢視,就會把刪除與新增的行上下排在一起:

合併檢視:刪除的行用紅色與減號標示,新增的行用綠色與加號標示,未改變的行維持白色,左側有左右兩份文字各自的行號
合併檢視。減號開頭是刪除,加號開頭是新增,沒有符號的行是沒改變的上下文。

怎麼讀 unified diff

按「↓ 下載 .diff」(或 .patch,兩者內容相同),得到的是 435 位元組的文字檔:

--- a/original.txt
+++ b/modified.txt
@@ -1,7 +1,8 @@
 社團活動通知
-日期:10 月 12 日(星期六)
-地點:三樓活動教室
+日期:10 月 19 日(星期六)
+地點:二樓活動教室
 集合時間:上午 9 點
-費用:每人 100 元
-請攜帶:水壺、帽子
+費用:每人 120 元(含保險)
+請攜帶:水壺、帽子、雨具
 報名截止:10 月 8 日
+聯絡人:王小明(示範)

選項怎麼用(實測)

三個「忽略」選項預設都沒勾選,每一項都是用一個最小的例子測的:

每一列是只有一種差異的兩段文字。結果是工具顯示的差異處數。
選項測試的兩段文字沒勾選勾選後
忽略空白「費用:每人 100 元」與「費用:每人 100 元」(多了空格)1 處差異沒有差異
忽略大小寫「Room A, Building 2」與「room a, building 2」1 處差異沒有差異
忽略空行「第一段/第二段」與中間多了一個空行的版本1 處差異(新增 1 行)沒有差異

勾選忽略選項後,被忽略的差異不會產生區塊,但下載的 unified diff 仍然以原文輸出,套用 patch 之前請再確認一次。

行內標示:字詞、字元、不標示

同一行的變動,行內可以標得很粗或很細。以「費用:每人 100 元」改成「費用:每人 120 元(含保險)」為例:選「字詞」會把整個「100」與「120」標起來;選「字元」只標出真正不同的那個字(0 與 2);選「不標示」就只標整行。「中文以字元為單位比對」預設勾選,因為中文字之間沒有空格,要用字元才能切得開。

同一行用兩種行內標示的結果:字詞模式標出整個 100 與 120,字元模式只標出不同的那個字元
上:行內標示「字詞」。下:行內標示「字元」。

顯示範圍

文字很長、只改了一兩處時,用「只看差異附近」最省事。我們用 40 行的文字、只改第 20 行測試:選前後 3 行,畫面只顯示差異附近的幾行;選前後 10 行會多顯示一些上下文;選「全部內容」才會列出全部 40 行。

大檔也能比對嗎?(實測)

工具頁標示「2 萬行大檔也能比對」。我們產生了 20,000 行(約 63 萬字)的文字,在其中每 100 行改一行,共 200 行不同,比對的結果是「200 處差異」,耗時 191 毫秒(在這台測試電腦上,不同裝置會有差異)。單一檔案的上限是 20 MB。

使用上的注意事項

常見問題

我貼的文字會被上傳或保存嗎?

不會。比對全程在你的瀏覽器裡進行,文字與檔案都不會上傳,也不會被保存,工具只會記住你選的比對選項。

為什麼明明有改,卻顯示沒有差異?

最可能的原因是勾了忽略空白、忽略大小寫或忽略空行,而你改的剛好是這幾類。把這些選項取消再比一次。

並排和合併要選哪一個?

寬螢幕用並排最直觀,左右兩邊對照著看;窄螢幕或手機用合併檢視比較好讀,工具在寬度小於 760 px 時預設用合併。

.diff 和 .patch 有什麼不同?

本工具下載的兩者內容相同,只是副檔名不同,.patch 方便丟給 patch 或 git apply 使用。

可以比對多大的檔案?

單一檔案上限是 20 MB。我們實測 20,000 行、約 63 萬字的文字只要 191 毫秒,但這會因裝置而異。

相關工具:文字差異比對 — 逐行、逐字比較兩份文字或程式碼,匯出 unified diff 與 HTML 報告。

開啟文字差異比對

延伸閱讀

回到教學文章列表 ・ 回到工具箱首頁