Principalmente .gitattributes
archivo tiene * text=auto
. ¿Cuál es el propósito de text=auto
ese archivo?
Principalmente .gitattributes
archivo tiene * text=auto
. ¿Cuál es el propósito de text=auto
ese archivo?
Respuestas:
De los documentos :
Cada línea en
.gitattributes
(o.git/info/attributes
) archivo tiene forma:pattern attr1 attr2 ...
Entonces, aquí, el patrón es *
, lo que significa todos los archivos, y el atributo es text=auto
.
¿Qué text=auto
hacer? De la documentación:
Cuando el texto se establece en "auto", la ruta se marca para la normalización automática de fin de 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é core.autocrlf
hacer? 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 estén normalizados: 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 como entrada, en cuyo caso no se realiza ninguna conversión de salida.
Si crees que todo esto es tan claro como el barro, no estás solo.
* text=auto
Esto es lo que hace en mis palabras: cuando alguien confirma 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 todos los bytes CR + LF se reemplazan con bytes LF. No afecta directamente el aspecto de los archivos en el árbol de trabajo, hay otras configuraciones que convertirán los bytes LF en bytes CR + LF al retirar un archivo.
Yo no recomendaría poner * text=auto
en el .gitattributes
archivo. 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 consiguen que CRLF se convierta a LF en la base de datos de objetos (pero no necesariamente en el árbol de trabajo). Tuvimos un repositorio * text=auto
y Git adivinó mal para un archivo de imagen que 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 usarlo * text=auto
, colóquelo como la primera línea .gitattributes
para que las líneas posteriores puedan anularlo. Esto parece convertirse en una práctica cada vez más popular.
everyone
refiere a usted git-scm
, probablemente sea porque están desarrollando un paquete * nix y, por lo tanto, usar el carácter de nueva línea * nix es normal .
git-scm
provienen de * nix. MacOS usa LF. Solo Windows (considerando solo los sistemas operativos principales) está usando CRLF. Esto hace que sea más difícil para los desarrolladores usar herramientas * nix en Windows y para todos al intercambiar archivos. Ver también Por qué CRLF .
*.txt text=auto
y *.txt text
por favor? Pensé que las 4 líneas en su ejemplo anterior deberían haber sido text=auto
, no solo text
después de la extensión del archivo. Los archivos de huella de KiCad, por ejemplo (extensión ".kicad_mod"), se normalizan utilizando esta línea en su archivo gitattributes: *.kicad_mod text=auto
( kicad-pcb.org/libraries/klc/G1.7 ).
Asegura que las terminaciones de línea estén normalizadas. Fuente: Kernel.org
Cuando el texto se establece en "auto", la ruta se marca para la normalización automática de fin de línea. Si git decide que el contenido es texto, sus finales de línea se normalizan a LF en el registro.
Si desea interoperar con un sistema de administración de código fuente que imponga la normalización de fin de línea, o simplemente desea que se normalicen todos los archivos de texto en su repositorio, debe establecer el atributo de texto en "auto" para todos los archivos.
Esto garantiza que todos los archivos que git considera texto tendrán terminaciones de línea normalizadas (LF) en el repositorio.
When a text file is normalized, its line endings are converted to LF in the repository.
LF
, incluso en Windows?
Esa configuración es con respecto a cómo se manejan los finales de línea. Cuando está habilitado, todas las terminaciones de línea se convierten a LF en el repositorio. Hay otros indicadores para tratar cómo se convierten las terminaciones de línea en su directorio de trabajo. La información completa sobre el problema nos aquí: https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html