檔案比對
編輯文件、程式碼或任何資料時,總有引入錯誤的風險。檔案比較工具透過顯示兩組或多組資料之間的差異,專注於新的資料並忽略未變更的部分,使電腦運算更簡單、更有效率。這類工具通常以 Unix 的 diff 工具程式為名,泛稱為 diff,有各式各樣的方法可以比較資料來源並顯示結果。
一些廣泛使用的檔案比較程式包括 diff、cmp、FileMerge、WinMerge、Beyond Compare 和 File Compare。
由於了解變更對於程式碼或文件的撰寫者至關重要,許多文字編輯器和文書處理器都內建了必要的功能,以檢視檔案或文件不同版本之間的變更。
方法類型
尋找差異的最有效方法取決於來源資料以及變更的性質。其中一種方法是找出兩個檔案之間的最長共同子序列,然後將不共通的資料視為插入或刪除。
1978 年,Paul Heckel 發表了一種演算法,能夠識別大多數移動的文字區塊。IBM History Flow 工具即採用此演算法。其他檔案比較程式也能找出區塊移動。
一些專門的檔案比較工具會找出兩個檔案之間的最長遞增子序列。rsync 協定則使用滾動雜湊函數,以低通訊開銷比較兩台遠端電腦上的兩個檔案。
文書處理器中的檔案比較通常是字詞層級,而大多數程式開發工具中的比較則是行層級。在某些特殊應用中,位元組或字元層級的比較也相當實用。
顯示
檔案比較的最佳結果顯示方式取決於許多因素,包括來源資料的類型。程式碼固定的行數提供了明確的比較單位。但這對文件來說並不適用,因為在文件中新增一個單字就可能導致後續行的換行方式不同,但內容本身並未改變。
最常見的變更顯示方式有兩種:並排顯示,或是突顯資料插入與刪除的整合檢視。在任一種並排檢視中,為了提高效率,介面可能會透過程式碼摺疊或文字摺疊,隱藏檔案中未變更的部分,僅顯示有變更之處。
原理
使用比較工具有各種原因,而工具本身也採用不同的方法。要比較二進位檔案,工具可能會使用位元組層級的比較。若要比較文字檔案或電腦程式,許多工具則使用並排的視覺化比較。這讓使用者有機會在將檔案合併成新版本之前,選擇要保留或捨棄哪些變更,或者也可以透過某種形式的「版本控制」,將兩個版本都保留下來以供日後參考。
檔案比較是檔案同步與備份中一個重要且不可或缺的過程。在備份方法學中,資料毀損是個重要的議題。資料毀損發生前很少有警訊,這使得還原變得困難甚至不可能。問題通常要到下一次有人嘗試開啟檔案時才會顯現。在這種情況下,比較工具可以幫助找出問題是在何時被引入的。
歷史用途
在檔案比較出現之前,已有機器用來比較磁帶或打孔卡。IBM 519 卡片複製機能夠判斷一副打孔卡是否相同。1957 年,John Van Gardner 開發了一個系統,透過比較已載入的 Fortran 程式區段的校驗和,來為 IBM 704 上的編譯問題進行除錯。
參見
參考資料
外部連結
Category:資料差異分析 Category:工具軟體類型