tag example endings crear archivo git line-endings eol gitattributes

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:

  1. 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.

  1. 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.