有没有办法强制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。 没有好的方法来区分或合并一般的二进制文件。 一个字节的改变可以改变文件其余部分的解释。
有两种处理二进制文件的通用方法:
接受他们是二进制的。 差异不会有意义,所以不要问他们。 永远不要合并它们,这意味着只允许在一个分支上进行更改。 在这种情况下,通过将每个调整(或一组相关的调整放在一个单独的文件中,这样做可以变得更容易,所以在一个文件中可能会有更少的方式差异。
将更改存储为文本,并将其转换/解构为这些二进制表单。
即使这些“文本”文件,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文件。