2010-11-24 16 views
11

Tengo una necesidad particular de que git trate la mayoría de las extensiones de archivo como binarias, excepto algunas extensiones.¿Pueden los .gitattributes de can git tratar a todos los archivos como binarios, excepto algunas excepciones?

me gustaría tratar a todas las extensiones de archivo como binario, .pdf .doc .xls, etc., excepto los archivos de texto sin formato, como .txt .RB .py etc.

.gitattributes configuración

que he probado como a continuación para ver cómo esto podría funcionar:

# cat .gitattributes 
* binary 
*.txt text 

pensé que tal vez el orden en el fichero de configuración importaría pero no parece. Con la configuración anterior, todos los archivos se tratan como binarios.

¿Hay alguna forma de configurar .gitattributes o git de otra forma para tratar todos los archivos de una manera, como binarios, excepto por unas pocas excepciones?

Actualización 1:

Probé la .gitattributes se describen a continuación. ¡Funciona!

# cat .gitattributes 
*.txt crlf diff 
* binary 


# git diff 
diff --git a/file b/file 
index d929b94..bee5cb1 100644 
Binary files a/file and b/file differ 

diff --git a/file.txt b/file.txt 
index 632ae98..93d22b0 100644 
--- a/file.txt 
+++ b/file.txt 
@@ -1 +1,3 @@ 
Hey this is a .txt file 
+Adding another line 
+A new line 

Actualización 2:

Creo CRLF y el texto son los mismos, es decir por debajo de las dos configuraciones de .gitattributes son los mismos:

# cat .gitattributes 
*.txt crlf diff 
* binary 

# cat .gitattributes 
*.txt text diff 
* binary 

Respuesta

17

binary es una estableciendo el atributo macro crlf y diff (en realidad aquí los desarma)
Ver "USING ATTRIBUTE MACROS" del .gitattribute man page.

Una vez que un atributo está establecido o no, si una regla posterior no lo puede cambiar.

lo que podría intentar:

* binary 
*.txt crlf diff 

De esa manera, y crlfdiff están estableciendo para *.txt archivos, que no será desarmado por la macro binario para esos mismos *.txt archivos, mientras que será desactivada para todos los otros archivos.

Desde el 2009 commit b9d14ff, esas reglas deben ir:

  • desde las más generales
  • a los más específicos.
    ("una línea más adelante anula una línea anterior")
+1

"Una vez que un atributo está establecido o no, si no puede ser modificado por una regla posterior". Información muy útil! Gracias. – caleban

+1

@caleban: sí, la sección "EJEMPLO" de la página del manual 'gitattribute' (http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html#_example) da una buena ilustración de esa regla – VonC

+0

Esa sección me era tan extraña, abstracta como sea, cuando la estaba mirando inicialmente no la entendía. Ahora lo entiendo. – caleban

0

Git no tiene el concepto de archivos "binarios" y "Texto". Todo se define como un conjunto de atributos que designan cómo debemos hacer fusiones, diffs, conversiones CR/LF, manejar espacios en blanco, aplicar filtros y trillones de otras cosas.

binary y sintaxis como

*.o binary
es en realidad a base de macro, es decir binary es una macro que se expande a una porción entera de varios atributos que designan la fusión, diffing, CR manejo/LF, etc.

No hay macro text por lo que veo. binary se expande a -crlf -diff, por lo que deshabilitar el binario y volver al procesamiento de estilo de texto parece ser crlf diff.

+1

Definitivamente hay una macro de texto definida ahora: http://git-scm.com/docs/gitattributes#_using_attribute_macros – skolima

+0

¡Buen punto, gracias! – GreyCat

Cuestiones relacionadas