2011-02-18 14 views
11

¿Hay alguna manera de forzar a Git a tratar los archivos .reg como texto? Estoy usando Git para rastrear mis ajustes de registro de Windows y Windows usa .reg para estos archivos.Git dice "Archivos binarios a ... y b ... difieren" en los archivos * .reg

ACTUALIZACIÓN 1: Lo tengo para ejecutar un diff (gracias, Andrew). Sin embargo, ahora se ve a continuación. ¿Es esto un problema de codificación?

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^@ 
... 

¿Alguna idea?

ACTUALIZACIÓN 2: Gracias a todos los que ayudaron a: esto es lo que hice en el final: crear el archivo con el contenido .gitattributes*.reg text diff y luego Convertí los archivos a UTF-8 como UTF-16 es raro con diff. No uso ningún carácter extraño, así que UTF-8 funciona para mí.

+1

Codificado en UTF-16 (probablemente, podría ser UCS-2, pero creo que la BOM solo se usa para UTF) –

+0

Posiblemente un duplicado de http://stackoverflow.com/q/777949/166955 –

+2

UTF-8 puede manejar los mismos "caracteres extranjeros" como UTF-16 :-) –

Respuesta

8

A decir git diff de forma explícita un tipo de archivo, poner lo siguiente en un archivo .gitattributes en el directorio raíz de su repositorio:

*.reg diff 
+0

Esto no funciona para mí. Creé un archivo '.gitattributes' y puse ese código exactamente. – matpie

+5

Necesitaba cambiarlo a '* .reg diff' (sin errores). Pero ahora parece todo raro. Actualicé la pregunta. – matpie

+0

Lo mismo aquí, 'text' no funciona pero' diff' sí. – nathanchere

4

Git es el tratamiento de los archivos de registro de exportación como archivos binarios porque tienen NULs. No hay una buena manera de diferir o fusionar general archivos binarios. Un cambio de un byte puede cambiar la interpretación del resto del archivo.

Hay dos enfoques generales para el manejo de archivos binarios:

  1. aceptar que son binarios. Los difusos no serán significativos, así que no los solicite. Nunca los combines, lo que significa que solo permite cambios en una rama. En este caso, esto puede facilitarse poniendo cada ajuste (o conjunto de ajustes relacionados en un archivo separado, por lo que hay menos formas posibles de que las diferencias sucedan en un archivo.

  2. Almacene los cambios como texto y conviértalo/deconvert a estas formas binarias.

a pesar de que estos archivos de "texto", la codificación UTF-16 contiene NULs. no parece haber ningún bit que no son ASCII sin embargo. ¿puede usted convertir a ASCII (o UTF 8, que será ASCII si no hay caracteres extendidos)?

+0

En realidad, son exportaciones de registro. No estoy respaldando todo el registro. Edito estos archivos en Vim y no son binarios. Aquí está el archivo en cuestión: https://gist.github.com/834529 – matpie

+0

@sirlancelot: Ah, claro. Están codificados en UTF-16. Convertirlos a UTF-8 y luego? – wnoise

2

Convierte archivos .reg de utf16 a utf8 abriendo cada archivo .reg en el bloc de notas y guardar como codificación UTF-8.

+0

Ha pasado un tiempo pero IIRC, probé esto y el archivo ya no importaría para mí. – matpie

+0

Si lo guardó como un archivo diferente, el archivo anterior debería funcionar como antes. Mi método permite la diferencia de los nuevos archivos después de la conversión, y no estaba destinado a ser importable. – konyak

2

Crear una 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) 

Luego haces en bash:

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

Y eso es bueno para los archivos de registro de diferencias, así como archivos de Xcode, o .strings cualquier otro archivo utf-16.

+1

guau gran trabajo. funciona perfecto – nickel715

Cuestiones relacionadas