Skip to main content

Configuration de Git pour traiter les fins de ligne

Pour éviter les problÚmes dans vos différences, vous pouvez configurer Git pour gérer correctement les fins de ligne.

Platform navigation

À 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 en CRLF au moment du basculement sur une branche. Vous devez l’utiliser pour les fichiers qui doivent conserver les fins CRLF, mĂȘme sur OSX ou Linux.

  • text eol=lf : Git convertit toujours les fins de ligne en LF 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Ăštre binary 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.

  1. 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.

  2. 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"
    
  3. 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 .
    
  4. Pour afficher les fichiers normalisés réécrits, exécutez la commande suivante.

    Shell
    git status
    
  5. 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"
    

Pour aller plus loin