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.

Quand 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é un changement sur 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 les commandes suivantes.

    Shell
    git rm -rf --cached .
    git reset --hard HEAD
    
  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