4

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

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

4

1 回答 1

4

来自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)看,似乎底层的包格式使用了二进制差异格式,它自适应地搜索现有对象以构造二进制增量,以避免存储整个新对象。在这个级别上,对象(文件)只是二进制 blob,我认为除了最模糊的情况外,最好将对象打包的东西视为实现细节。

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

于 2013-07-16T16:34:44.987 回答