git和二进制文件的自定义diff

时间:2013-07-16 16:11:00

标签: git

我有一个二进制文件格式,我包含在git存储库中。我知道二进制文件的文件格式,并且可以想象为它们创建一个类似于diff的工具,它会生成一个文本输出,所以当我查看git历史记录时我可以看到差异。我甚至可以创建一个可以获取原始二进制文件的工具,以及diff文本并创建新的二进制文件,这样git就不必一次又一次地保存二进制文件并进行小的更改。

如果我要制作这些类型的工具,我怎么能将它与git集成?

1 个答案:

答案 0 :(得分: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的机制:您提供的程序可以将二进制文件转换为文本摘要,而不是提供差异程序。然后使用正常的git diff机制来呈现那些文本摘要的差异。

编辑:我不知道如何让低级对象包装例程使用自定义差异工具。在低级git-pack-objects(1)手册页的行之间读取,似乎底层包格式使用二进制diff格式,它自适应地搜索现有对象以构造二进制增量,以避免存储整个新对象。在这个级别,对象(文件)只是二进制blob,我认为除了最模糊的情况之外,最好将对象打包处理为实现细节。

换句话说,如果你的二进制对象在二进制级别上彼此相似,那么它们将由git自动有效地表示。我可以想象的常见情况是压缩和加密文件。