Estos mensajes se deben a un valor predeterminado incorrecto de core.autocrlf
en Windows.
El concepto de autocrlf
es manejar conversiones de terminaciones de línea de manera transparente. Y lo hace!
Malas noticias : el valor debe configurarse manualmente.
Buenas noticias : solo debe hacerse UNA vez por instalación de git (también es posible la configuración por proyecto).
Cómo autocrlf
funciona :
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repo repo repo
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \
Aquí crlf
= marcador de fin de línea estilo win, lf
= estilo unix (y mac osx).
(pre-osx cr
no se ve afectado por ninguna de las tres opciones anteriores)
¿Cuándo aparece esta advertencia (en Windows)
- autocrlf
= true
si tiene estilo unix lf
en uno de sus archivos (= RARAMENTE),
- autocrlf
= input
si tiene estilo win crlf
en uno de sus archivos (= casi SIEMPRE),
- autocrlf
= false
- ¡NUNCA!
¿Qué significa esta advertencia?
La advertencia " LF será reemplazado por CRLF " dice que usted (tener autocrlf
= true
) perderá su LF de estilo Unix después del ciclo de confirmación de compra (será reemplazado por CRLF de estilo Windows). Git no espera que uses LF de estilo unix en Windows.
La advertencia " CRLF será reemplazado por LF " dice que usted (tener autocrlf
= input
) perderá su CRLF de estilo Windows después de un ciclo de confirmación de compra (será reemplazado por LF de estilo Unix). No lo use input
debajo de las ventanas.
Otra forma más de mostrar cómo autocrlf
funciona
1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x
dónde x es CRLF (estilo Windows) o LF (estilo Unix) y las flechas representan
file to commit -> repository -> checked out file
Como arreglar
El valor predeterminado para core.autocrlf
se selecciona durante la instalación de git y se almacena en todo el sistema gitconfig ( %ProgramFiles(x86)%\git\etc\gitconfig
). También hay (en cascada en el siguiente orden):
- gitconfig "global" (por usuario) ubicado en ~/.gitconfig
, otro más
- gitconfig "global" (por usuario) en $XDG_CONFIG_HOME/git/config
o $HOME/.config/git/config
y
- "local" (por repo) .git/config
en el directorio de trabajo.
Entonces, escribe git config core.autocrlf
en el directorio de trabajo para verificar el valor utilizado actualmente y
- agregar autocrlf=false
a la solución # por sistema de gitconfig en todo el sistema
- git config --global core.autocrlf false
# solución por usuario
- git config --local core.autocrlf false
# por proyecto
Advertencias
: la git config
configuración puede ser anulada por la gitattributes
configuración.
-crlf -> lf
conversión solo ocurre al agregar nuevos archivos, los crlf
archivos que ya existen en el repositorio no se ven afectados.
Moral (para Windows):
- use core.autocrlf
= true
si planea usar este proyecto también en Unix (y no está dispuesto a configurar su editor / IDE para usar terminaciones de línea Unix),
- use core.autocrlf
= false
si planea usar este proyecto solo en Windows ( o ha configurado su editor / IDE para usar terminaciones de línea unix),
- nunca use core.autocrlf
= a input
menos que tenga una buena razón para hacerlo ( p . ej. si está utilizando utilidades Unix en Windows o si tiene problemas con los archivos MAKE),
PD: ¿Qué elegir al instalar git para Windows?
Si no va a utilizar ninguno de sus proyectos en Unix, no esté de acuerdo con la primera opción predeterminada. Elige el tercero ( Checkout as-is, commit as-is ). No verás este mensaje. Siempre.
PPS Mi preferencia personal es configurar el editor / IDE para usar finales de estilo Unix, y configurarlo core.autocrlf
en false
.