2011-01-19 33 views

回答

8

讓我嘗試和真實的方式開始,然後指出了一些較新的方法。我已經很久很久以前看過的工作與二進制文件

方法,人們擴大了老的二進制文件的新版本爲暫時的「文本」文件(擴展到3個字節的每一個字節: 2個十六進制數字和一個換行符)。 然後通過舊版本的「diff」(絕對無法處理二進制文件)運行這兩個「文本」文件來創建補丁文件。 然後,我們通過尚未完成8位清理的通信線傳輸該「文本」補丁文件。 在接收端,一個擴大了舊的二進制文件到臨時文本版本,然後修補舊的文本文件,然後將壓縮新的文本文件重新導入一個二進制文件(每對十六進制數字壓縮成一個字節,並投擲離開新線和任何可能已經進入的回車)。

最近,我一直在使用rsync(或某些工具建立在它之上,如齊奏)。 它處理任意二進制文件就好了。 我通常會進行實時更新,在我的本地計算機上運行Unison,並在文件服務器上運行rsync,互相交談。

無論如何生成補丁文件,都可以使用任何數據壓縮實用程序來壓縮該文件。

接近的是,據我所知,應該用二進制文件

StackOverflow: "how to crate a PATCH file for the binary difference output file" 建議使用bsdiff工作。

另一個StackOverflow question意味着「vimdiff」同樣似乎充分地處理任意字節。

StackOverflow: "Useful Binary Diff Tool"提到了其他一些二進制差異的工具。

我聽說一些基於rsync的工具 - 「rdiff」和「rdiff-backup」和「duplicity」 - 允許你創建一個補丁文件。 然後接收該修補程序文件的人可以使用它來將其舊的二進制文件更新爲新的二進制文件。

Wikipedia claims最近版本的標準「diff」和「patch」工具支持二進制文件。 你試過嗎?

前沿的研究成果中的可執行文件壓縮

如果你有興趣的前沿研究上使增量文件儘可能小更新可執行文件時,你會想看看 "How Courgette works" The Chromium Projects 2009年的Stephen Adams 2009年的作品 。

其中,接收補丁的計算機「拆卸」舊應用程序,將所有絕對地址和偏移量轉換爲符號;然後修補反彙編的代碼;然後將修補的代碼「重新組裝」到應用程序的新版本中。

+0

非常感謝你的親切解釋,大衛。 對於我的問題,經過多次實驗後xdelta成爲我的選擇。 – tianyapiaozi

5

嘗試xdelta

我正在爲超大文件尋找一些二進制diff工具(一個LVM邏輯卷及其快照,因爲LVM不支持快照快照)並且xdelta對我很有用。