如何找出兩個版本的文字差異
要找出兩個版本之間的差異,把兩段文字貼進比對工具即可。工具會將文字對齊,列出不同的行,並在每組不同的行中標出改動的字詞。不論程式碼還是一般文章都適用:長段落裡只改了一個字,也能一眼看出,其餘內容則保持不動。
比對文字差異兩個版本之間改了什麼?免費使用差異比對的原理
差異比對會尋找最長共同子序列(LCS):也就是在兩個版本中以相同順序出現的最長一串項目。這些項目不必彼此相鄰。共同序列中的內容沒有變動;其他部分則不是新增(只出現在新版本),就是刪除(只出現在舊版本)。
舉個簡單的例子。舊文字是「A B C D」,新文字是「A C X D」。最長的共同序列是「A C D」,所以 B 是刪除,X 是新增。比對工具處理長文件時也是同樣的做法,因此能列出精確的變更清單,而不是把兩段文字並排擺著讓你自己找。
以行或以字詞比對
- 以行比對適合程式碼、設定檔、清單,以及每行一個項目的內容。改動的行會以「刪除一行、新增一行」的方式呈現。
- 以字詞比對適合文章、合約,以及各種一般文字。在每組改動的行之中,比對工具只標出有變動的字詞,所以只改了一個字的句子,不會看起來像被整句重寫。
實例:一個關鍵字
來看同一條條款的兩個版本:
- 舊版:「供應商應於訂單成立後 14 日內交付貨品。」
- 新版:「供應商得於訂單成立後 30 日內交付貨品。」
在比對工具中,這句話會顯示為一行被刪除、一行被新增。標出的字詞會精確顯示兩處改動:「應」改成「得」,「14」改成「30」。句子的其餘部分完全相同。第一處改動會改變語意,原本的義務變成了選擇,所以要仔細看標出的字詞。
忽略空白與大小寫
空白與大小寫的差異常會掩蓋真正的改動,因此工具提供了相關勾選項目:
- 只有空格變動時,勾選忽略空白,例如編輯器自動加入的行尾空格。
- 清單由多人輸入時,勾選忽略大小寫。但在大小寫有意義的地方不要忽略,例如設定檔的鍵名,或 Linux 上的檔案名稱。
- 勾選只顯示有變動的行,就能在很長的比對結果中隱藏未變動的文字。
舉例來說,若忽略大小寫,「Total: 100」和「total: 100」的內容相同。但在鍵名區分大小寫的檔案中,它們是兩個不同的設定,因此那裡不應忽略大小寫。
在 fixmint 上操作
- 把較舊的版本貼到原始,較新的版本貼到變更後。
- 只有在這些差異對你的檢查沒有影響時,才勾選忽略空白或忽略大小寫。
- 先看改動的行,再看行內標出的字詞。
- 勾選只顯示有變動的行,隱藏長比對結果中未變動的文字。
- 按下複製差異保存結果。
特殊情況
- 段落移動。差異比對會保留原本的順序,因此移動過的段落會在一處顯示為刪除,在另一處顯示為新增。你可以用眼睛找出來,或把兩個段落分開來比對。
- 重新換行的文字。如果新版本以不同寬度重新斷行,逐行比對會報告不是真正的改動。先用修正貼上的文字把行接起來,再進行比對。換行指南說明了相關規則。
- 隱藏字元。看不見的字元即使沒有任何可見的變化,也會被當成改動。比對前請先移除隱藏字元。
- 大幅改寫。當幾乎所有內容都變了,差異比對很難閱讀。請一次比對一個段落。
如何解讀結果
先看刪除的內容,再看新增的內容。優先檢查數字、日期、名稱與否定詞,因為一個數字的變動,可能比整頁的改寫更重要。以合約為例,一句 12 個字的句子中有兩個字詞改動,屬於小幅修改,而標出的字詞讓人很容易發現。如果你比對的是自己寫的兩個版本,字數比對也能顯示新版本是變長還是變短。
當兩個版本出自不同的人之手時,請替它們標上名稱,例如「第 3 版」和「第 4 版」,並保持舊檔案不變。依照由上到下的順序閱讀變更,你就能看出論點或條款在各次修改中如何演變。這比只找最大的改動來得慢,但較不容易漏掉細微的變化。
對於結構化資料而言,逐行比對並不適合:一個儲存格的改動,可能會使整列以及之後的每一行都跟著位移。請改用比較兩份試算表逐格比對,或比較兩份 JSON 檔案逐個鍵名比對,這樣得到的變更清單才能符合資料結構。
快速解答
什麼是差異比對?
差異比對是兩個版本之間新增與刪除內容的清單,計算依據是兩個版本所共有的最長序列。
應該以行還是以字詞比對?
程式碼與清單適合以行比對,因為每一行都是獨立的項目。一般文章適合以字詞比對,因為單一句子可能在段落中有所改動。
為什麼差異比對會把整個段落都標示為已變動?
通常是因為換行、空白或隱藏字元不同。請忽略空白、重新排列文字或移除隱藏字元,然後再比對一次。
借助 AI 協助,由英文原文翻譯而成。
留言
還沒有留言,搶先留言吧。


