J'utilise Ubuntu 13.10 x64 et je travaille sur un projet que certains développeurs utilisent sous Windows. J'ai récemment modifié git config core.eol
en "lf" et core.autocrlf
en "entrée" et core.safecrlf
en "vrai". Depuis lors, lorsque j'essaie de valider un fichier dans mon référentiel local, le message d'erreur suivant s'affiche:fatal: CRLF would be replaced by LF in ......
D'après ce que j'ai compris, si je règle core.eol
sur "lf" et core.autocrlf
sur "entrée", git convertira automatiquement CRLF en LF, mais pourquoi cette erreur se produit-elle? Comment puis-je résoudre ce problème?
Je vous remercie.
C'est un problème classique:
(image de Luis Tubes 's article de blog )
La solution habituelle consiste à convertir ces fichiers vous-même, avec dos2unix ou Swiss File Knife .
J'ai toujours préféré garder core.autocrlf
à false
, ce qui signifie:
git config --global core.autocrlf false
J'ai eu le même problème et j'ai essayé la solution suggérée sans succès.
Je devais exécuter une deuxième commande pour que cela fonctionne:
$ git config --global core.autocrlf false
$ git config --global core.safecrlf false
$ git config core.autocrlf false
On peut juste essayer dos2unix:
dos2unix [filename]
Cela m'est arrivé sur des milliers de fichiers. J'ai donc écrit un script bash rapide pour que dos2unix
le répare pour moi. Quelqu'un d'autre sur Linux ou Mac pourrait le trouver utile.
#!/usr/bin/env bash
unwindows() {
local errmsg
local fpath
# 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
fpath="${errmsg#*fatal: CRLF would be replaced by LF in }"
fpath="${fpath%.*}"
if [[ "${fpath}" == "${errmsg}" ]]; then
err 'Regex failed. Could not auto-generate filename from stderr.'
return 1
fi
if [[ ! -e "${fpath}" ]]; then
err "Regex failed. '${fpath}' does not exist."
return 1
fi
if ! dos2unix "${fpath}"; then
err "Failed to run \"dos2unix '${fpath}'\"."
return 1
fi
# recursive case
unwindows
}
err() {
local -r msg="$1"
echo "${msg}" >&2
}
unwindows
En gros, il essaie de faire git add .
. Si la commande échoue, elle récupère le nom du fichier incompatible à partir de la sortie d'erreur. Ensuite, il exécute dos2unix
sur ce fichier. Il répète ce processus jusqu'à ce que git add .
fonctionne.
Si vous exécutez ceci, vous devriez voir dos2unix: converting file xxx to Unix format...
à plusieurs reprises. Si vous ne le faites pas, cela ne fonctionne pas, alors appuyez simplement sur ctrl+c ou command+c pour l'arrêter.
Vous devez ajouter tous les fichiers que git status
affiche tels que modifiés:
git add file1
git add file2
Et puis validez vos modifications:
git commit
Cela conservera vos fichiers locaux tels quels, mais autocrlf
sur le référentiel distant.
J'ai rencontré le même problème et résolu avec l'édition .gitattributes
ci-dessous.
$ vim .gitattributes
commentez 2 lignes en .gitattributes
-* text=auto
-* text eol=lf
+# * text=auto
+# * text eol=lf
Pour votre information, je ne suis pas sûr que cela s’applique à vous, mais j’obtenais cette erreur en essayant par inadvertance d’ajouter tous les node_modules
aux modifications planifiées. Donc, en fait, .gitignoring
le node_modules
a résolu mon problème.