tipos tag remove qué existen etiquetas crear git gitattributes

tag - ¿Cuál es el propósito de `text=auto` en el archivo`.gitattributes`?



qué tipos de etiquetas existen en git (3)

En su .gitattributes archivo .gitattributes tiene * text=auto . ¿Cuál es el propósito de text=auto en ese archivo?


Asegura que las terminaciones de línea estén normalizadas. Fuente: Kernel.org

Cuando el texto se establece en "automático", la ruta se marca para la normalización automática al final de la línea. Si git decide que el contenido es texto, sus finales de línea se normalizan a LF al registrarse.

Si desea interoperar con un sistema de administración de código fuente que aplica la normalización de fin de línea, o simplemente desea que todos los archivos de texto en su repositorio se normalicen, en su lugar debe establecer el atributo de texto en "automático" para todos los archivos.

Esto asegura que todos los archivos que git considera que son texto tendrán terminaciones de línea normalizadas (LF) en el repositorio.


De Kernel.org :

Cada línea en el .gitattributes (o .git/info/attributes ) tiene forma:

pattern attr1 attr2 ...

Entonces aquí, el patrón es * , lo que significa todos los archivos, y el atributo es text=auto .

¿Qué hace text=auto do? De la documentación:

Cuando el texto se establece en "automático", la ruta se marca para la normalización automática al final de la línea. Si Git decide que el contenido es texto, sus finales de línea se normalizan a LF al registrarse.

¿Cuál es el comportamiento predeterminado si no está habilitado?

Sin especificar

Si el atributo de texto no está especificado, Git usa la variable de configuración core.autocrlf para determinar si el archivo debe convertirse.

¿Qué hace core.autocrlf ? De los documentos:

core.autocrlf

Establecer esta variable en "verdadero" es casi lo mismo que establecer el atributo de texto en "automático" en todos los archivos, excepto que no se garantiza que los archivos de texto se normalicen: los archivos que contienen CRLF en el repositorio no se tocarán. Utilice esta configuración si desea tener terminaciones de línea CRLF en su directorio de trabajo aunque el repositorio no tenga terminaciones de línea normalizadas. Esta variable se puede configurar para que ingrese, en cuyo caso no se realiza conversión de salida.

Si crees que todo esto es tan claro como el barro, no estás solo.

Esto es lo que * text=auto hace en mis palabras: cuando alguien comete un archivo, Git adivina si ese archivo es un archivo de texto o no, y si lo es, confirmará una versión del archivo donde se reemplazan todos los bytes CR + LF con bytes LF. No afecta directamente a qué archivos se parecen en el árbol de trabajo, hay otras configuraciones que convertirán bytes LF a bytes CR + LF al extraer un archivo.

Recomendación:

No recomendaría poner * text=auto en el archivo .gitattributes . En cambio, recomendaría algo como esto:

*.txt text *.html text *.css text *.js text

Esto designa explícitamente qué archivos son archivos de texto, que convierten CRLF convertido a LF en la base de datos de objetos (pero no necesariamente en el árbol de trabajo). Tuvimos un repositorio con * text=auto , y Git adivinó incorrectamente que un archivo de texto era un archivo de texto, lo que lo corrompió al reemplazar los bytes CR + LF con bytes LF en la base de datos de objetos. No fue divertido depurarlo.

Si debe usar * text=auto , .gitattributes como la primera línea en .gitattributes , de modo que las líneas posteriores puedan anularlo. Esto parece convertirse en una práctica cada vez más popular.


Esa configuración es con respecto a cómo se manejan las terminaciones de línea. Cuando está habilitado, todas las terminaciones de línea se convierten a LF en el repositorio. Existen otros indicadores para tratar cómo se convierten las terminaciones de línea en su directorio de trabajo. Información completa sobre el problema aquí: Kernel.org