Answers:
您可以textconv
为文件类型设置配置选项。请参见gitattributes(5)中的 “执行二进制文件的文本差异” 。您应该使用哪种取决于文件类型。
范例1:
假设您要比较zip文件的内容。在这种情况下,应将以下内容放在$ GIT_DIR / config文件或$ HOME / .gitconfig中。
[diff "zip"]
textconv = unzip -v
下次您在存储库中要求对zip文件进行比较时,它将unzip -v
同时调用这两个版本,并比较结果文本。
范例2:
对于pdf文件,您可以使用eg pdfinfo
;
[diff "pdf"]
textconv = pdfinfo
例子3:
如果文件类型没有特定的信息实用程序,则可以使用hexdump
(例如FreeBSD和OSX附带,在Linux上也可用):
[diff "bin"]
textconv = hexdump -v -C
罗兰·史密斯(Roland Smith)的回答很有帮助,但目前尚不完整(请参阅评论)-分为两个部分。
您可以在存储库的.git/config
文件或个人全局~/.gitconfig
文件中定义新的diff命令,例如,使用的十六进制diff命令hexdump
:
[diff "hex"]
textconv = hexdump -v -C
binary = true
接下来,您需要使用存储库的.gitattributes
文件来告诉git该特殊的diff命令应使用哪些文件:
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
与.gitignore
文件一样,.gitattributes
应将文件检入到存储库中。
就我而言,我有几种不同的文件扩展名,我希望将其视为二进制文件(例如,如果在Windows上使用git,请避免任何行尾转换),并且还可以通过hexdump
以下方式查看任何差异:
https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d
另请参阅https://github.com/resin-io/etcher/pull/1367,以获取定义用于图像文件的hexdump diff命令的另一个示例。
.gitattributes
全局(与[diff]
global中的条目一起使用.gitconfig
)。如果您将.gitattributes
本地存储库设为存储库,则用户将不得不修改其本地存储.gitconfig
库设置,因为出于安全原因,这些设置不会被推送到远程。无论哪种方式,每个用户都必须以某种方式更新其本地文件/配置以启用此行为。在.gitconfig
下面[core]
添加attributesfile = c:/users/<username>/.gitattributes
或任何你想要保存它,如果你让全球(注意forwardslashes,即使在窗户)。