2013-07-16 48 views
3

我有一個二進制文件格式,我包含在一個git存儲庫中。我知道二進制文件的格式,可以設想爲它們創建一個類似diff的工具,它會產生一個文本輸出,所以當我查看一個git歷史記錄時,我可以看到差異。我甚至可以創建一個可以獲取原始二進制文件的工具,以及diff文本並創建新的二進制文件,這樣git無需一次又一次地保存二進制文件,只需稍作更改即可。git和二進制文件的自定義比較

如果我要製作這些類型的工具,我該如何將它與git集成?

回答

3

git help config

diff.external 
     If this config variable is set, diff generation is not performed 
     using the internal diff machinery, but using the given command. Can 
     be overridden with the ‘GIT_EXTERNAL_DIFF’ environment variable. 
     The command is called with parameters as described under "git 
     Diffs" in git(1). Note: if you want to use an external diff program 
     only on a subset of your files, you might want to use 
     gitattributes(5) instead. 

gitattributes(5)還提到一個叫textconv機制:不是提供一個diff程序,你提供你的二進制文件轉換爲文本摘要的程序;然後使用正常的git diff機制來呈現這些文本摘要的差異。

編輯:我不知道有什麼辦法讓底層對象打包例程使用自定義diff工具。讀取低級git-pack-objects(1)手冊頁的行之間,底層包格式可能使用二進制比較格式,該格式自適應搜索現有對象以構建二進制增量,以避免存儲整個新對象。在這個級別上,對象(文件)只是二進制blob,我認爲除了最晦澀的情況外,最好將對象包裝作爲實現細節。換句話說,如果你的二進制對象在二進制級別是相似的,它們將被git自動有效地表示。我可以想象出這種情況並非如此的常見情況是壓縮和加密文件。

+0

這是偉大的提供一個可讀的輸出,但我也可以用它來使整個二進制文件不會保存每次它的變化,而不是隻是差異?我想,需要進行一些向後差異化(將diff應用於原始文件以獲取新文件)。 – Michael