Git对* .reg文件说“二进制文件a …和b …不同”

有没有办法强制Git把.reg文件作为文本处理? 我使用Git来跟踪我的Windowsregistry调整和Windows使用.reg这些文件。

更新1:我得到它运行差异(谢谢,安德鲁)。 但是,现在看起来如下所示。 这是一个编码问题?

 index 0080fe3..fc51807 100644 --- a/Install On Rebuild/4. Registry Tweaks.reg +++ b/Install On Rebuild/4. Registry Tweaks.reg @@ -1,49 +1,48 @@ -<FF><FE>W^@i^@n^@d^@o^@w^@s^@ ^@R^@e^@g^@i^@s^@t^@r^@y^@ ^@E^@d^@i^@t^@o^@r^@ -^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@; -^@^M^@ ... 

有任何想法吗?

更新2:谢谢所有谁帮助:这是我最后做的:创build文件.gitattributes与内容*.reg text diff ,然后我把文件转换为UTF-8 UTF-16奇怪与差异。 我没有使用任何外来字符,所以UTF-8适合我。

要告诉git明确地区分一个文件类型,把以下内容放在你的版本库根目录的.gitattributes文件中:

 *.reg diff 

Git将注册表导出文件视为二进制文件,因为它们有NUL。 没有好的方法来区分或合并一般的二进制文件。 一个字节的改变可以改变文件其余部分的解释。

有两种处理二进制文件的通用方法:

  1. 接受他们是二进制的。 差异不会有意义,所以不要问他们。 永远不要合并它们,这意味着只允许在一个分支上进行更改。 在这种情况下,通过将每个调整(或一组相关的调整放在一个单独的文件中,这样做可以变得更容易,所以在一个文件中可能会有更少的方式差异。

  2. 将更改存储为文本,并将其转换/解构为这些二进制表单。

即使这些“文本”文件,UTF-16编码包含NULs。 但似乎没有非ASCII位。 你可以将它们转换为ASCII(或UTF-8,如果没有扩展字符,它将是ASCII码)?

将.reg文件从utf16转换为utf8,方法是在记事本中打开每个.reg文件并保存为编码UTF-8。

创建一个utf16toascii.py

 #!/usr/bin/env python3 import sys data = open(sys.argv[-1]).read() ascii = data.decode('utf-16').encode('ascii', 'replace') sys.stdout.write(ascii) 

然后在bash中做:

 $ echo "*.reg diff=utf16strings" >> .gitattributes $ git config --global diff.utf16strings.textconv /path/to/utf16toascii.py 

而且你可以很好地区分注册表文件,Xcode .strings文件或者任何其他的utf-16文件。