example - git push tag
¿Qué hace "! Eol" en gitattributes? (4)
Básicamente deshabilita eol
según la documentation :
A veces, necesitaría anular una configuración de un atributo para una ruta al estado no especificado. Esto se puede hacer enumerando el nombre del atributo con un signo de exclamación.
eol
hace lo siguiente:
Este atributo establece un estilo de final de línea específico para ser usado en el directorio de trabajo. Permite la normalización de final de línea sin ninguna verificación de contenido, estableciendo efectivamente el atributo de texto.
Recientemente encontré la siguiente entrada en un archivo .gitattributes:
"* text=auto !eol"
¿Qué hace !eol
?
Git tiene 2 atributos que tratan con el fin de las líneas:
- texto
La documentación dice:
Este atributo habilita y controla la normalización de final de línea. Cuando un archivo de texto se normaliza, sus finales de línea se convierten a LF en el repositorio
Esto efectivamente significa que cuando se comprometa con el repositorio, convertirá los finales de línea a LF.
- eol
La documentación dice:
Este atributo establece un estilo de final de línea específico para ser usado en el directorio de trabajo. Permite la normalización de final de línea sin ninguna verificación de contenido, estableciendo efectivamente el atributo de texto.
Entonces, mientras que el atributo de texto afecta a cómo se verá el archivo EN LA REPO, eol
afecta a cómo se ve el archivo en el directorio de trabajo.
Ahora, un atributo puede tener 4 estados:
establecer sin valor
ejemplo: * text
desarmado
ejemplo: * -text
establecer con valor específico
ejemplo: * text=auto
no especificado
ejemplo: * !text
Entonces, * text=auto !eol
significa esto:
Todos los archivos tienen el atributo de texto establecido en auto y el atributo eol no especificado . Al leer la documentación, descubrimos que text = auto significa que dejas que git decida si un archivo es texto y si lo es, lo normalizará (establece los finales de línea en el repositorio a LF).
!eol
significa que el atributo eol se establece en no especificado explícitamente. En este caso, es lo mismo que no especificarlo en absoluto, indicando a Git que mire la configuración de configuración core.eol para ver cómo lidiar con los finales de línea en el directorio de trabajo. Note esto:
La variable de configuración core.eol controla qué finales de línea usará Git para los archivos normalizados en su directorio de trabajo; el valor predeterminado es usar la línea nativa que termina en su plataforma, o CRLF si se establece core.autocrlf.
Pero usaría! Eol en una situación como la siguiente:
* text=auto eol=CRLF
test.txt !eol
básicamente anulando el atributo eol de CRLF a no especificado para test.txt. Esto significa que para todos los archivos excepto test.txt, Git convertirá en EOL de pago a CRLF, pero no hará nada para test.txt.
Version corta:
Si Git decide que el contenido es texto, sus finales de línea se normalizan a LF en el registro. Revertir cualquier configuración eol explícita en algún archivo .gitattributes anidado.
Ver man gitattributes
:
Each line in gitattributes file is of form:
pattern attr1 attr2 ...
Sometimes you would need to override an setting of an attribute for a path to
Unspecified state. This can be done by listing the name of the attribute
prefixed with an exclamation point !.
text
This attribute enables and controls end-of-line normalization. When a text
file is normalized, its line endings are converted to LF in the
repository. To control what line ending style is used in the working
directory, use the eol attribute for a single file and the core.eol
configuration variable for all text files.
Set to string value "auto"
When text is set to "auto", the path is marked for automatic
end-of-line normalization. If Git decides that the content is text,
its line endings are normalized to LF on checkin.
eol
This attribute sets a specific line-ending style to be used in the working
directory. It enables end-of-line normalization without any content
checks, effectively setting the text attribute.
* text=auto !eol
implica:
- no se realizaría ninguna conversión EOL (final de línea) para archivos binarios.
- para los archivos de texto, los EOL se convierten en EOL dependiente del sistema operativo (se convierten a LF para Unix y CR + LF para Windows) al revisar el archivo y se reemplazan con LF mientras se registra.