§

Options

視圖
粒度
Preprocessing
§

Input

台灣的工程師和法律從業者在每個工作流程層面都會遇到差異比對:在 GitHub 和 GitLab 上進行程式碼審查,在 Microsoft Word 中追蹤合約修訂,在 Google 文件中進行同儕審查。根據個資法或金管會(FSC)要求處理敏感資料的組織,通常禁止將設定片段或文件草稿貼到公開的 SaaS 比對服務上。在瀏覽器分頁中執行比對——無上傳、無帳號、無第三方日誌——既能保持工程師的工作流程順暢,也符合資料處理政策的規範。

差異演算法的運作方式

此頁面上的每個差異視圖都由 Myers 演算法產生——這是 Eugene W. Myers 在 1986 年提出的技術,用 O((N+M)D) 的時間複雜度在兩個符號序列之間找到最短編輯腳本,其中 D 是編輯距離。此演算法基於最長公共子序列問題,引擎使用開源的 jsdiff 函式庫完全在您的瀏覽器中執行。

  1. 對輸入進行符號化 — 比較之前,演算法將每個輸入拆分為符號序列。行粒度以換行符分割;字粒度以空白字元和標點符號邊界分割;字元粒度將每個 Unicode 碼點視為獨立符號。
  2. 建立編輯圖 — Myers 演算法將比較建模為一條穿越二維網格的路徑,其中向右移動表示「從原始中刪除」,向下移動表示「從修改中插入」,對角移動表示「兩者中的符號匹配」。演算法找到最短的對角線密集路徑。
  3. 提取最長公共子序列 — 最短路徑中的對角移動追蹤最長公共子序列——以相同相對順序出現在兩個輸入中的符號。最長公共子序列中的每個符號都是「未變更的」;其他所有符號要麼是新增,要麼是刪除。
  4. 套用預處理選項 — 如果您啟用「忽略大小寫」,兩個輸入在最長公共子序列處理之前都會轉換為小寫,使「HELLO」和「hello」被視為相同。「忽略空白字元」將多個空格合併為一個。「修剪每行」在比較前去除每行的前後空白字元。
  5. 渲染所選視圖 — 輸出是以三種方式顯示的相同最長公共子序列結果:並排視圖在雙欄網格中以紅色和綠色行高亮顯示原始(左)和修改後(右)。統一視圖在單欄中顯示帶有 − 和 + 前綴的行,類似 git diff 的輸出。行內視圖在同一文字流中以紅色刪除線顯示刪除,以綠色下劃線顯示新增。
  6. 計算摘要條 — 渲染後,工具計算新增、刪除和未變更的符號數量,然後將相似度計算為未變更符號與兩個輸入長度中較大值的比率。相似度為 100% 表示預處理後的輸入完全相同。

為什麼使用差異比對工具

  • 無需 Git 客戶端的程式碼審查 — 貼上設定檔、SQL 遷移腳本或 shell 指令碼的兩個版本,查看變更內容,無需複製倉庫、切換分支或等待 CI 流水線。此工具在配對程式設計時進行快速審查、在另一方未分享 Git 記錄的承包商交接,以及完全早於版本控制的舊版程式碼庫中非常方便。統一視圖可產生您可以直接複製到聊天或工單中的輸出。
  • 合約和文件的修訂追蹤 — 字級差異比 Word 的修訂追蹤面板更快地顯示合約草稿之間哪些術語發生了變化。從第一份草稿貼上條款 A,從執行副本貼上條款 B,替換內容會在移動的確切短語處以紅綠色亮起。法律助理和採購團隊使用此功能在合約簽署前驗證最後一刻的修訂是否通過了審查。
  • 文章和草稿修訂 — 比較初稿和編輯版本的作家可以切換到字粒度,查看每個替換、插入和刪除,無需重讀兩個副本。翻譯人員稽核相對於原文的變更、編輯人員檢查文案編輯是否保留了作者的風格,以及新聞團隊將已發布文章與原始草稿進行對照,都可以使用相同的工作流程。
  • 日誌和設定比較 — 比較兩個伺服器設定快照、兩個 cron 排程或兩個 ps aux 輸出的系統管理員可以使用行粒度,在幾秒鐘內找到 200 行檔案中的那個唯一變更參數。與「忽略空白字元」選項配合使用,嘈雜的僅對齊差異就會縮減到實際重要的參數變更。

常見應用場景

文字差異出現在寫作、開發和運維工作中的每個編輯週期末尾。

  • Pull request 審查:並排貼上兩個函式實作,在不簽出分支的情況下了解邏輯變更,然後再核准。
  • 國際化 QA:以字級比較英文原始字串與其翻譯版本,偵測翻譯者可能引入的插入、遺漏或術語替換。
  • 事故分析:以行級比對兩個 Kubernetes 清單快照或兩個「docker inspect」輸出,以隔離在故障前發生的設定變更。

實際範例

以一個五行的伺服器設定為例。原始:host=localhostport=5432dbname=app_dbuser=apppassword=secret。修改後:host=db.prod.example.comport=5432dbname=app_dbuser=app_prodpassword=secret。以行粒度和並排視圖顯示時,第 1 行左側顯示紅色(host=localhost),右側顯示綠色(host=db.prod.example.com),第 4 行顯示紅色(user=app)和綠色(user=app_prod),第 2、3、5 行在兩側保持不變。摘要條報告 2 次新增、2 次刪除、3 個未變更,相似度為 60%——五行中保留了三行。切換到字粒度,差異進一步縮小:只有第 1 和第 4 行 = 右側的值亮起,鍵保持不變,相似度攀升至約 85%,因為最長公共子序列現在將 hostuser 和周圍的標點符號計為保留。

這是在我的瀏覽器中執行的嗎?

是的。整個差異計算使用隨頁面載入的開源 jsdiff 函式庫在客戶端執行。您輸入、貼上或比較的任何內容都不會發送到任何伺服器。您可以自行驗證:開啟瀏覽器開發者工具,切換到網路標籤,清除日誌,點擊「比較」,確認比較步驟沒有觸發任何網路請求。

相似度百分比是什麼意思?

相似度計算為未變更符號數 / max(原始總符號數, 修改後總符號數)。100% 表示套用預處理選項(大小寫折疊、空白字元合併、行修剪)後兩個輸入完全相同。0% 表示輸入之間沒有共享符號。此指標是編輯距離的粗略近似——作為快速衡量指標很有用——而非抄襲或原創性分數。

我可以對 JSON / YAML / XML 進行語意差異比對嗎?

此工具不支援。這是文字級差異比對,因此即使資料在邏輯上相同,JSON 或 XML 的純空白字元重新格式化仍然會顯示許多變更。JSON 中物件鍵的重排也會顯示為變更,即使多數解析器認為鍵順序無關緊要。要進行真正的語意差異比對——比較已解析的物件樹並忽略鍵順序和格式——我們計劃推出專用的 JSON Diff 工具。目前,請在貼上之前將兩個輸入標準化為相同的縮排和鍵順序。

統一視圖和並排視圖有什麼區別?

並排視圖渲染兩列:原始在左,修改後在右,左側刪除行以紅色高亮,右側新增行以綠色高亮。未變更的行在兩列中對齊顯示。統一視圖渲染單列,刪除行帶有 前綴和紅色背景,新增行帶有 + 前綴和綠色背景——與 git diff 在終端機中輸出的佈局相同。當您想將結果複製為 patch 檔案或貼入程式碼審查討論串時,使用統一視圖。當替換內容的視覺對齊比原始 patch 文字更重要時,使用並排視圖。

將原始版本貼到左側,修改後的版本貼到右側,選擇視圖和粒度,比較結果在毫秒內呈現。開啟即時模式,編輯任意一側時差異就會在每次按鍵時重新執行。將結果下載為標準統一 .patch 檔案,git apply 可直接使用。無需上傳、無需帳號、無需廠商 API 金鑰、無配額限制。