Nic*_*ack 52 diff git difftool
为了在 git 中比较二进制文件,我假设我需要设置一个 difftool。
什么 difftools 工作?怎么把参数放进去?
Rol*_*ith 35
您可以textconv
为文件类型设置配置选项。请参阅gitattributes(5) 中的“执行二进制文件的文本差异” 。您应该使用什么取决于文件类型。
示例 1:
假设您想比较 zip 文件的内容。在这种情况下,你应该把在下列文件中的一个$XDG_CONFIG_HOME/git/config
或$HOME/.gitconfig
或$GIT_DIR/config
。
[diff "zip"]
textconv = unzip -v
Run Code Online (Sandbox Code Playgroud)
下次您要求对 repo 中的 zip 文件进行比较时,它将调用unzip -v
两个版本并比较结果文本。
示例 2:
对于 pdf 文件,您可以使用例如pdfinfo
;
[diff "pdf"]
textconv = pdfinfo
Run Code Online (Sandbox Code Playgroud)
示例 3:
如果文件类型没有特定的信息实用程序,您可以使用hexdump
(随 FreeBSD 和 OSX 一起提供,也可在 Linux 上使用):
[diff "bin"]
textconv = hexdump -v -C
Run Code Online (Sandbox Code Playgroud)
小智 32
如果你想强制 git 将二进制文件 diff 显示为纯文本 diff 使用--text
选项,如下所示:
git diff --text
Run Code Online (Sandbox Code Playgroud)
pet*_*rjc 24
罗兰史密斯的回答很有帮助,但目前不完整(见评论)——这有两个部分。
您可以在存储库的.git/config
文件或个人全局$XDG_CONFIG_HOME/git/config/.gitconfig
(通常为 $HOME/.gitconfig
)文件中定义新的 diff 命令,例如使用hexdump
以下命令的 hex diff 命令:
[diff "hex"]
textconv = hexdump -v -C
binary = true
Run Code Online (Sandbox Code Playgroud)
接下来,您需要使用存储库的.gitattributes
文件来告诉 git 哪些文件应该与这个特殊的 diff 命令一起使用:
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
Run Code Online (Sandbox Code Playgroud)
与.gitignore
文件一样,该.gitattributes
文件也应签入您的存储库。
就我而言,我有几个不同的文件扩展名,我想将它们视为二进制文件(例如,如果在 Windows 上使用 git,则避免任何行结束转换),并且还可以通过hexdump
以下方式查看任何差异:
https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d
另请参阅https://github.com/resin-io/etcher/pull/1367以获取定义用于图像文件的 hexdump diff 命令的另一个示例。
要创建一个二进制补丁,一个适用于二进制文件的补丁,而不仅仅是说“二进制文件不同”,请使用
git diff --binary file1 file2
Run Code Online (Sandbox Code Playgroud)
这会生成一个仅使用 ASCII 字符(与 不同)的“GIT 二进制补丁” --text
,适合通过电子邮件发送。
归档时间: |
|
查看次数: |
42789 次 |
最近记录: |