2011-02-18 68 views
11

有沒有辦法強制Git將.reg文件視爲文本?我使用Git來跟蹤我的Windows註冊表調整,Windows使用.reg來處理這些文件。Git對* .reg文件說「二進制文件a ...和b ...不同」

UPDATE 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:感謝所有誰幫助:這是我最後還是沒買:創建文件.gitattributes與內容*.reg text diff,然後我將文件轉換爲UTF-8 UTF-16是怪異與diff文件。我沒有使用任何外來字符,所以UTF-8適合我。

+1

這是UTF-16編碼(可能是UCS-2,但我認爲BOM僅用於UTF) – 2011-02-18 22:07:13

+0

可能是UTF-8的副本http://stackoverflow.com/q/777949/166955 – 2011-02-18 22:14:50

+2

UTF-8可以處理與UTF-16相同的「外部字符」:-) – 2011-02-19 00:23:24

回答

8

通知Git明確diff的某一類文件,放在一個.gitattributes文件版本庫的根目錄下:

*.reg diff 
4

Git是治療你的註冊表導出文件作爲二進制文件,因爲它們有完全無效。有沒有好的方法來比較或合併一般二進制文件。改變一個字節可以改變文件其餘部分的解釋。

一般有兩種方法來處理二進制文件:

  1. 接受這樣的二進制文件。區別不會有意義,所以不要問他們。永遠不要合併它們,這意味着只允許在一個分支上進行更改。在這種情況下,通過將每個調整(或一組相關的調整放在一個單獨的文件中,這可以變得更容易,所以在一個文件中可能會有更少的方式差異發生)

  2. 將更改存儲爲文本, deconvert這些二進制格式。

即使這些「文本」文件時,UTF-16編碼包含完全無效。似乎有沒有非ASCII位然而,你可以將它們轉換爲ASCII(或UTF- 8,如果沒有擴展字符,它將是ASCII碼)?

2

通過打開記事本中的每個.reg文件,將.reg文件從utf16轉換爲utf8並保存爲編碼UTF-8。

2

創建一個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 

,你是好到DIFF註冊表文件,以及Xcode的.strings文件,或任何其他的utf-16文件。