for - git line endings settings
¿Qué hará `* text=auto eol=lf` en gitattributes? (2)
Tenemos esto en nuestro archivo .gitattributes:
* text=auto eol=lf
Me gustaría entender con precisión lo que esto hace.
La primera parte es text=auto
. De la documentation :
Esto garantiza que todos los archivos que Git considera como texto tendrán terminaciones de línea normalizadas (LF) en el repositorio.
Lo importante es que Git realiza la normalización solo para los archivos que detecta como archivos de texto.
Sin embargo, no estoy seguro acerca de la parte eol=lf
. Creo que también hará la normalización solo para los archivos de texto, pero no puedo encontrarlo en la documentación y tuvimos una instancia en la que nuestros archivos PNG también se normalizaron, haciéndolos inválidos.
¿Hay una configuración como la anterior que básicamente diga "realice la normalización en ambas direcciones para los archivos de texto y deje los archivos binarios solos"?
Git 2.10 solucionó esto y ahora se comporta como uno esperaría.
La respuesta es no, Git actualmente (a partir de la versión 2.3) no puede realizar la conversión de EOL de pago con autodetección de formatos binarios y de texto para que solo procese texto. La solución es especificar eol=lf
solo para los tipos de archivos seleccionados (por ejemplo, *.txt
) o, de forma inversa, marcar ciertos tipos de archivos como binarios utilizando, por ejemplo, *.png binary
).
Relacionado: propuesta de características en la lista de correo de Git.
* text=auto
Esto normalizará correctamente los archivos de texto en el repositorio. Sin embargo, la segunda parte (LF forzando en el pago) no se puede lograr fácilmente hoy porque agregar
eol=lf
desafortunadamente también procesará archivos binarios. La única solución hoy es marcar ciertos tipos para la conversión (por ejemplo,*.txt eol=lf
) o, inversamente, marcar ciertos tipos como binarios (por ejemplo,*.png binary
).Ambos tienen el mismo problema: los tipos de archivo específicos deben enumerarse explícitamente en el archivo
.gitattributes
, lo que significa que los tipos deben ser conocidos con anticipación o todos los desarrolladores deben recordar actualizar el archivo.gitattributes
cada vez que se.gitattributes
una nueva. Tipo de archivo aparece en el proyecto. Que no lo harán.