为 Git 和二进制文件定制差异比较工具

5

我有一个二进制文件格式,将其包含在一个Git仓库中。我了解该二进制文件的格式,并且可以构建类似于差异比较工具,生成文本输出以便通过查看Git历史记录来查看差异。我甚至可以创建一个工具,接收原始的二进制文件和差异文本,并生成新的二进制文件,这样Git就不必保存多次带有微小变化的二进制文件。

如果我要创建这些类型的工具,我应该如何将它们与Git集成?

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:你可以提供一个将二进制文件转换为文本摘要的程序,而不是提供一个 diff 程序;然后通常的 git diff 机制就会用来呈现这些文本摘要的差异。

编辑:我不知道如何让低级别的对象打包程序使用自定义的 diff 工具。从低级别的 git-pack-objects(1) 手册中可以看出,底层的打包格式似乎使用了一种二进制 diff 格式,该格式会自适应地搜索现有的对象以构建二进制增量,以避免存储整个新对象。在这个级别上,对象(文件)只是二进制块,除了最模糊的情况外,我认为最好将对象打包内容视为实现细节。

换句话说,如果你的二进制对象在二进制级别上相似,它们将被 git 自动有效地表示。我能想象到的常见情况是压缩和加密文件,这种情况下可能不成立。


这在提供可读输出方面非常好,但我能否也使用它使得每次更改时不保存整个二进制文件,而只保存差异部分?我想需要进行一些反向差分(将差分应用于原始文件以获取新文件)。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接