文本差異(Diff)比較
按行比較兩段文本,用顏色標出新增的行和刪除的行。適用於檢查配置檔案的改動、校對文件、或在不使用Git的情況下進行程式碼審查。所有比較都在瀏覽器內完成,輸入內容不會發送到伺服器。
使用技巧
- 將配置檔案(.env、YAML、JSON等)修改前後的內容貼上進來,即可一眼看出哪些行被新增或刪除。
- 即使沒有安裝Git,只需複製貼上兩個版本,也能進行簡易的程式碼審查或文件校對。
- 行的位置調換會被識別為"刪除+新增",而不是"移動"。當同一內容的行只是換了位置時,仍會顯示為差異,請留意這一點。
- 空格、換行符和大小寫都會被嚴格逐字元比較,因此僅縮進發生變化的行也會被判定為"已變更"。
- 比較長篇文章時,先將每個段落整理成一行再貼上,能讓差異結果按段落一目瞭然。
常見問題
適用於比較配置檔案或文件修改前後的內容、在不使用Git的環境下進行程式碼審查、確認合同或條款的修訂之處等,任何需要按行掌握純文本變化的場景都可以使用。
CSV差異比較工具針對具有列結構的表格資料,通過鍵列匹配後逐單元格比較;而本工具比較的是不具備列結構的自由格式文本,按行比較。適合配置檔案、文章等非表格資料。
JSON差異比較工具會解析JSON的結構(物件和陣列的層級)並按鍵比較;本工具不解析任何結構,只是將每一行作為字串進行比較,因此除了JSON之外的任意文本也能使用。
行的調換不會被識別為"移動",而是顯示為原位置的刪除和新位置的新增的組合。這與Git的diff命令等常見的按行比較演算法的行為是一致的。
不會。差異計算完全在瀏覽器內的JavaScript中完成,輸入的文本不會被發送到伺服器,即使包含機密資訊的文件也可以放心使用。
閒話 ― 用LCS(最長公共子序列)求差異的原理
檢測兩段文本差異的演算法中,1970年代由IBM電腦科學家尤金·邁爾斯(Eugene Myers)發表的"Myers差分演算法"廣為人知。Git、SVN等主流版本控制系統的`diff`命令都採用了這一系列演算法,能高效檢測按行的新增和刪除。本工具也基於同樣的思路,通過求出最長公共子序列(LCS)將變化範圍縮小到最小。
最長公共子序列(LCS)是指兩個序列(這裡指行的排列)中都按順序出現的、最長的公共部分序列。兩段文本的差異,就是把不屬於這個LCS的行判定為"刪除"或"新增"求出來的,LCS越長,螢幕上顯示的變化就越少。藉助動態規劃(DP)這一演算法技巧,即使是行數很多的文本,也能在現實的時間內完成計算。
diff演算法也有其弱點。當某一行只是移動到了別的位置時,多數實現都不會將其識別為"移動",而是顯示為"刪除"和"新增"的組合。這就是為什麼行順序被大幅打亂的文本進行比較時,差異看起來會比實際變化更多的原因。瞭解這一特性,有助於在解讀差異結果時減少誤解。