Por qué no se honra eol = crlf en .gitattributes

Así que decidí convertir todos los files con terminaciones de línea estilo Windows en nuestro repository git para tener terminaciones de línea de estilo Unix.

Seguí las instrucciones de http://www.git-scm.com/docs/gitattributes#_end_of_line_conversion :

echo "* text=auto" >>.gitattributes rm .git/index # Remove the index to force Git to git reset # re-scan the working directory git status # Show files that will be normalized git add -u git add .gitattributes git commit -m "Introduce end-of-line normalization" 

Más tarde me di count de que esto también había cambiado * .bat files que deberían haber permanecido CRLF. Intenté todo el process nuevamente con el siguiente file .gitattributes :

 # Default * text=auto eol=lf # Windows-only files *.bat text eol=crlf 

Esto no pareció cambiar el resultado del git status de git status , los files de process por lotes aún se marcaron como "cambiados" a pesar de que eran CRLF en mi copy de trabajo y .gitattributes configuró exactamente para eso. Parecía que git simplemente ignoraría la línea con *.bat . git show --raw también me mostró que el file ahora se estaba almacenando con LF en lugar de CRLF.

Después de horas tratando (y fracasando) de encontrar una buena especificación sobre el formatting de .gitattributes , decidí probar lo siguiente (tenga en count que NO es la solución correcta para el problema):

 *.bat -text 

Y, he aquí, los files por lotes desaparecieron del git status , lo que indica que no había ningún problema con la syntax del file, como había supuesto inicialmente. Si bien no quería que los files por lotes se trataran como binarys, esto me lleva a lo que ahora creo que es la conclusión correcta:

No entendí lo que git realmente hace al marcar un file con el atributo de text . Siempre almacena los files con terminaciones de líneas LF internamente y solo se convierte en CRLF al momento de pagar. Así que mis pasos iniciales fueron completamente correctos, simplemente produjeron resultados que me confundieron y me hicieron pensar que algo andaba mal. Los files realmente habían cambiado; anteriormente se almacenaban con CRLF, pero ahora se almacenarían con terminaciones de línea solo LF, que se corregirían durante el process de pago.