have - git commit come fatal error "fatal: CRLF sería reemplazado por LF en"
line endings have changed from lf to crlf (6)
Estoy usando Ubuntu 13.10 x64, y estoy trabajando en un proyecto que algunos desarrolladores están usando Windows, recientemente cambié el git config core.eol
a "lf" y core.autocrlf
a "input" y core.safecrlf
a "true ". Desde entonces, cuando intento enviar el archivo a mi repositorio local, aparece este error:
fatal: CRLF would be replaced by LF in ......
Por lo que entiendo, si configuro core.eol
en "lf" y core.autocrlf
en "input", git convertirá automáticamente CRLF en LF, pero ¿por qué core.autocrlf
este error? ¿Como puedo solucionar este problema?
Gracias.
Debe agregar todos los archivos que muestra el git status
como modificado:
git add file1
git add file2
Y luego comprometa sus cambios:
git commit
Esto mantendrá sus archivos locales como están, pero los autocrlf
en el repositorio remoto.
Este es un problema clásico:
(foto del blog de Luis Tubes )
La solución habitual es convertir esos archivos usted mismo, con dos2unix o Swiss File Knife .
Siempre he preferido mantener core.autocrlf
en false
, lo que significa:
git config --global core.autocrlf false
Esto me sucedió en miles de archivos. Así que escribí un guión rápido de bash para que dos2unix
arreglara para mí. Alguien más en Linux o Mac podría encontrarlo útil.
#!/usr/bin/env bash
_unwindows() {
local errmsg;
local filepath;
# base case
errmsg="$(git add . 2>&1)";
if [ $? -eq 0 ]; then
echo "Successfully converted CRLF to LF in all files.";
echo "Successfully ran `git add .`.";
echo "Done.";
return 0;
fi;
filepath="${errmsg#*fatal: CRLF would be replaced by LF in }";
filepath="${filepath%.*}";
if [ "${filepath}" = "${errmsg}" ]; then
echo "Regex failed. Could not auto-generate filename from stderr.";
return 1;
fi;
if [ ! -e "${filepath}" ]; then
echo "Regex failed. ''${filepath}'' does not exist.";
return 1;
fi;
dos2unix "${filepath}";
if [ $? -ne 0 ]; then
echo "Failed to run /`dos2unix ''${filepath}''/`.";
return 1;
fi;
# recursive case
_unwindows;
};
_unwindows;
Básicamente, trata de hacer git add .
. Si el comando falla, toma el nombre del archivo incompatible de la salida del error. Luego ejecuta dos2unix
en ese archivo. Sigue repitiendo este proceso hasta que git add .
trabajos.
Si ejecuta esto, debería ver dos2unix: converting file xxx to Unix format...
repetidamente. Si no lo haces, no funciona, así que simplemente presiona ctrl + c o command + c para detenerlo.
Tuve el mismo problema y probé la solución sugerida sin éxito.
Tuve que ejecutar un segundo comando para que funcione:
$ git config --global core.autocrlf false
$ git config --global core.safecrlf false
Uno puede simplemente probar dos2unix:
dos2unix [filename]
$ git config core.autocrlf false