Ces messages sont dus à une valeur par défaut incorrecte de core.autocrlf
sous Windows.
Le concept de autocrlf
est de gérer les conversions de fin de ligne de manière transparente. Et c'est le cas!
Mauvaise nouvelle : la valeur doit être configurée manuellement.
Bonne nouvelle : cela ne devrait être fait qu'une seule fois par installation git (par paramètre de projet est également possible).
Comment ça autocrlf
marche :
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repo repo repo
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \
Ici crlf
= marqueur de fin de ligne de style gagnant, lf
= style unix (et mac osx).
(pré-osx cr
n'est pas affecté pour l'une des trois options ci-dessus)
Quand cet avertissement apparaît-il (sous Windows)
- autocrlf
= true
si vous avez un style unix lf
dans l'un de vos fichiers (= RAREMENT),
- autocrlf
= input
si vous avez un style win crlf
dans l'un de vos fichiers (= presque TOUJOURS),
- autocrlf
= false
- JAMAIS!
Que signifie cet avertissement
L'avertissement " LF sera remplacé par CRLF " indique que vous (ayant autocrlf
= true
) perdrez votre LF de style Unix après le cycle de validation de validation (il sera remplacé par CRLF de style Windows). Git ne s'attend pas à ce que vous utilisiez le LF de style Unix sous Windows.
L'avertissement " CRLF sera remplacé par LF " indique que vous (ayant autocrlf
= input
) perdrez votre CRLF de style Windows après un cycle de validation de validation (il sera remplacé par LF de style Unix). Ne pas utiliser input
sous les fenêtres.
Encore une autre façon de montrer comment ça autocrlf
marche
1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x
où x est CRLF (style Windows) ou LF (style Unix) et les flèches représentent
file to commit -> repository -> checked out file
Comment réparer
La valeur par défaut pour core.autocrlf
est sélectionnée lors de l'installation de git et stockée dans gitconfig ( %ProgramFiles(x86)%\git\etc\gitconfig
) à l' échelle du système . Il y a aussi (en cascade dans l'ordre suivant):
- gitconfig "global" (par utilisateur) situé à ~/.gitconfig
, encore un autre
- gitconfig "global" (par utilisateur) à $XDG_CONFIG_HOME/git/config
ou $HOME/.config/git/config
et
- gitconfig "local" (par repo) à .git/config
dans le répertoire de travail.
Donc, écrivez git config core.autocrlf
dans le répertoire de travail pour vérifier la valeur actuellement utilisée et
- ajouter autocrlf=false
à l'ensemble du système gitconfig # solution par système
- git config --global core.autocrlf false
# solution par utilisateur
- git config --local core.autocrlf false
# solution par projet
Avertissements
- les git config
paramètres peuvent être remplacés par les gitattributes
paramètres.
- la crlf -> lf
conversion ne se produit que lors de l'ajout de nouveaux fichiers, les crlf
fichiers déjà existants dans le référentiel ne sont pas affectés.
Moral (pour Windows):
- utilisez core.autocrlf
= true
si vous prévoyez d'utiliser également ce projet sous Unix (et ne souhaitez pas configurer votre éditeur / IDE pour utiliser les fins de ligne unix),
- utilisez core.autocrlf
= false
si vous prévoyez d'utiliser ce projet sous Windows uniquement ( ou vous avez configuré votre éditeur / IDE pour utiliser les fins de ligne unix),
- n'utilisez jamaiscore.autocrlf
= input
sauf si vous avez une bonne raison de le faire ( par exemple, si vous utilisez des utilitaires unix sous Windows ou si vous rencontrez des problèmes de makefiles),
PS Que choisir lors de l'installation de git pour Windows?
Si vous n'utilisez aucun de vos projets sous Unix, n'acceptez pas la première option par défaut. Choisissez le troisième ( Checkout as-is, commit as-is ). Vous ne verrez pas ce message. Déjà.
PPS Ma préférence personnelle est de configurer l' éditeur / IDE pour utiliser des terminaisons de style Unix et de le paramétrer core.autocrlf
sur false
.