Ă propos des fins de ligne
Chaque fois que vous appuyez sur retour sur votre clavier, vous insérez un caractÚre invisible appelé fin de ligne. Les fins de ligne sont traitées différemment selon le systÚme d'exploitation.
Lorsque vous collaborez sur des projets avec Git et GitHub, Git peut produire des résultats inattendus si, par exemple, vous travaillez sur une machine Windows et que votre collaborateur a effectué une modification sous macOS.
Vous pouvez configurer Git pour traiter automatiquement les fins de ligne afin de pouvoir collaborer efficacement avec des personnes qui utilisent des systĂšmes dâexploitation diffĂ©rents.
ParamÚtres généraux des fins de ligne
La commande git config core.autocrlf
est utilisée pour changer la façon dont Git traite les fins de ligne. Elle prend un seul argument.
Sur macOS, vous passez simplement input
dans la configuration. Par exemple :
$ git config --global core.autocrlf input
# Configure Git to ensure line endings in files you checkout are correct for macOS
Sur Windows, vous passez simplement true
dans la configuration. Par exemple :
$ git config --global core.autocrlf true
# Configure Git to ensure line endings in files you checkout are correct for Windows.
# For compatibility, line endings are converted to Unix style when you commit files.
Sur Linux, vous passez simplement input
dans la configuration. Par exemple :
$ git config --global core.autocrlf input
# Configure Git to ensure line endings in files you checkout are correct for Linux
ParamÚtres par dépÎt
Vous pouvez aussi configurer un fichier .gitattributes
pour gérer la façon dont Git lit les fins de ligne dans un dépÎt spécifique. Quand vous commitez ce fichier dans un dépÎt, il remplace le paramÚtre core.autocrlf
pour tous les contributeurs du dépÎt. Cela garantit un comportement cohérent pour tous les utilisateurs, quels que soient leurs paramÚtres et leur environnement Git.
Le fichier .gitattributes
doit ĂȘtre créé Ă la racine du dĂ©pĂŽt et commitĂ© comme nâimporte quel autre fichier.
Un fichier .gitattributes
ressemble Ă un tableau avec deux colonnes :
- Ă gauche, le nom de fichier que Git doit mettre en correspondance.
- Ă droite, la configuration de fin de ligne que Git doit utiliser pour ces fichiers.
Exemple
Voici un exemple de fichier .gitattributes
. Vous pouvez lâutiliser comme modĂšle pour vos dĂ©pĂŽts :
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
Notez que les fichiers sont mis en correspondance (*.c
, *.sln
, *.png
) séparés par un espace, puis reçoivent un paramÚtre (text
, text eol=crlf
, binary
). Voyons quelques-uns des paramĂštres possibles.
-
text=auto
: Git traite les fichiers avec la mĂ©thode qui lui paraĂźt la plus appropriĂ©e. Câest une bonne option par dĂ©faut. -
text eol=crlf
: Git convertit toujours les fins de ligne enCRLF
au moment du basculement sur une branche. Vous devez lâutiliser pour les fichiers qui doivent conserver les finsCRLF
, mĂȘme sur OSX ou Linux. -
text eol=lf
: Git convertit toujours les fins de ligne enLF
au moment du basculement sur une branche. Vous devez lâutiliser pour les fichiers qui doivent conserver les fins LF, mĂȘme sur Windows. -
binary
: Git comprend que les fichiers spĂ©cifiĂ©s ne sont pas du texte et quâil ne doit pas essayer de les changer. Le paramĂštrebinary
est également un alias de-text -diff
.
Actualisation dâun dĂ©pĂŽt aprĂšs changement des fins de ligne
AprĂšs avoir dĂ©fini lâoption core.autocrlf
ou commité un fichier .gitattributes
, Git modifie automatiquement les fins de ligne pour quâelles correspondent Ă votre nouvelle configuration. Vous remarquerez peut-ĂȘtre que Git signale des changements sur des fichiers que vous nâavez pas modifiĂ©s.
Pour vous assurer que toutes les fins de ligne de votre dépÎt correspondent à votre nouvelle configuration, sauvegardez vos fichiers avec Git, puis supprimez et restaurez tous les fichiers pour normaliser les fins de ligne.
-
Avant dâajouter ou de commiter des modifications, vĂ©rifiez que Git a correctement appliquĂ© la configuration. Par exemple, Git dĂ©termine automatiquement si les fichiers dâun dĂ©pĂŽt sont des fichiers texte ou binaires. Pour Ă©viter lâaltĂ©ration des fichiers binaires dans votre dĂ©pĂŽt, nous vous recommandons de marquer explicitement les fichiers comme binaires dans
.gitattributes
. Pour plus dâinformations, consultez gitattributes - DĂ©finition dâattributs par chemin dans la documentation Git. -
Pour éviter de perdre les modifications locales apportées aux fichiers dans le dépÎt, ajoutez et commitez les modifications en suspens en exécutant les commandes suivantes.
Shell git add . -u git commit -m "Saving files before refreshing line endings"
git add . -u git commit -m "Saving files before refreshing line endings"
-
Pour mettre à jour tous les fichiers de la branche actuelle afin de refléter la nouvelle configuration, exécutez la commande suivante.
Shell git add --renormalize .
git add --renormalize .
-
Pour afficher les fichiers normalisés réécrits, exécutez la commande suivante.
Shell git status
git status
-
Si vous le souhaitez, pour commiter les modifications en suspens dans votre dépÎt, exécutez la commande suivante.
Shell git commit -m "Normalize all the line endings"
git commit -m "Normalize all the line endings"
Pour aller plus loin
- Personnalisation de Git - Attributs Git dans la documentation Pro Git
- git-config dans les pages man pour Git
- Bien démarrer - PremiÚre configuration de Git dans la documentation Pro Git
- Mind the End of Your Line de Tim Clem