我有一个二进制文件格式,我包含在git存储库中。我知道二进制文件的文件格式,并且可以想象为它们创建一个类似于diff的工具,它会生成一个文本输出,所以当我查看git历史记录时我可以看到差异。我甚至可以创建一个可以获取原始二进制文件的工具,以及diff文本并创建新的二进制文件,这样git就不必一次又一次地保存二进制文件并进行小的更改。
如果我要制作这些类型的工具,我怎么能将它与git集成?
答案 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自动有效地表示。我可以想象的常见情况是压缩和加密文件。