Intermédiaire • Git 8 min de lecture 25 janvier 2025

gitattributes eol : fiabiliser les fins de ligne dans vos dépôts Git

LF ou CRLF ? Sur Windows, macOS ou Linux, le simple retour à la ligne peut déclencher des diffs interminables, des tests qui échouent et des merges pénibles. La clé se trouve dans .gitattributes eol. Voici comment l’utiliser pour stabiliser vos EOL et éviter les faux positifs.

Qu'est-ce que eol dans .gitattributes ?

L’attribut eol force le type de fin de ligne pour des chemins de fichiers. Il garantit une représentation cohérente dans le dépôt et un checkout prévisible selon vos règles.

Les éléments essentiels à connaître sur les fins de ligne :

1 Les fins de ligne courantes

LF, CRLF et CR historique (rare) dans certains vieux fichiers.

LF (10, \n), CR (13, \r), CRLF (\r\n)

2 Options Git liées aux EOL

core.autocrlf et core.eol influencent checkout/commit.

core.autocrlf = false | input | true
core.eol = native | lf | crlf

3 Règles .gitattributes utiles

Définissez le comportement par type de fichier pour des EOL fiables :

* text=auto
*.sh text eol=lf
*.bat text eol=crlf
*.png -text # binaires non normalisés

4 Détails techniques à connaître

Normalisation à l’index, checkout selon règles et config locale :

Index Git stocke les textes en LF
Checkout applique eol=lf ou eol=crlf si défini
Les binaires (-text) ne sont jamais modifiés

Problèmes classiques

Diffs qui montrent tout modifié

LF vs CRLF génère un changement de chaque ligne, rendant la review impossible.

Tests et snapshots qui cassent

Des snapshots générés en LF échouent sous Windows quand les fichiers sortent en CRLF.

Scripts shell ou Makefile qui plantent

Un CRLF parasite dans un script bash provoque un $'\r': command not found.

Rebase/merge plus conflictuels

Des EOL incohérents aggravent les conflits et brouillent les résolutions.

Exemple de problème courant :

# Deux chaînes paraissent identiques mais diffèrent par l’EOL
file1 = "echo ok\n"
file2 = "echo ok\r\n" # CRLF à la fin
assert file1 == file2 # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff Git montre ^M ou un changement systématique de toutes les lignes
!
Des hooks ou linter réécrivent les fichiers à chaque commit sans raison
!
Des scripts shell échouent alors que la commande est correcte
!
Des snapshots Jest/pytest diffèrent entre machines Windows et Linux
!
Une PR ajoute des milliers de lignes modifiées sans changer le contenu

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII met en évidence les fins de ligne et les caractères non standard. Collez un extrait de fichier et visualisez instantanément LF/CRLF et positions exactes pour corriger sans tâtonner.

✅ Détection automatique

Repère LF, CRLF, CR et mélange d’EOL dans un même fichier

📊 Analyse complète

Positions de lignes problématiques et recommandations .gitattributes

🧹 Nettoyage automatique

Conversion contrôlée vers LF ou CRLF selon votre besoin

💾 Export propre

Téléchargez la version normalisée prête à committer

Autres méthodes de détection

Affichage dans l'éditeur

Activez l’affichage des fins de ligne (LF/CRLF) dans la barre d’état
Installez EditorConfig et définissez end_of_line

En ligne de commande (Unix)

# Lister les lignes qui finissent par CRLF
grep -n $'\r' fichier.txt
# Voir clairement LF ($) et CR (^M)
cat -A fichier.txt
# Détecter des erreurs d'EOL dans l'index
git diff --check
# Inspecter les attributs appliqués
git check-attr -a -- fichier.txt

En code

JavaScript

const normalized = str.replace(/\r\n?/g, "\n");

Python

import re; normalized = re.sub(r"\r\n?", "\n", s)

Excel / Google Sheets

SUBSTITUE(cellule;CAR(13);"") # supprime CR

Nettoyer et prévenir

🚀 Solution rapide avec Clean ASCII

Avant les gros refactors, utilisez Clean ASCII pour vérifier et normaliser en un clic vos fins de ligne. Idéal pour préparer une PR propre et éviter les relectures bruitées.

Détection automatique LF/CRLF
Nettoyage vers LF ou CRLF
Export prêt à committer

Méthodes techniques avancées

🔧 Normaliser

Ajoutez * text=auto puis forcez la renormalisation
git add --renormalize . puis commit explicite
Définissez eol ciblé (ex: *.sh text eol=lf)

🧹 Filtrer

Désactivez core.autocrlf côté repo si vous fixez eol via attributs
Nettoyez les fichiers existants avec dos2unix/unix2dos si nécessaire
Protégez les binaires avec -text

⚙️ Automatiser

Hook pre-commit exécutant git diff --check
CI qui vérifie l’absence de CRLF non voulu dans les sources
EditorConfig partagé (end_of_line = lf par défaut)

Checklist rapide

.gitattributes avec * text=auto committé
Fichiers critiques forcés en LF ou CRLF via eol=
Renormalisation effectuée (git add --renormalize .)
EditorConfig avec end_of_line partagé
Hook/CI vérifiant git diff --check
Documentation interne expliquant LF/CRLF et la politique EOL

Conclusion

Les problèmes d’EOL coûtent du temps sans rien apporter. Avec .gitattributes eol, vous figez un comportement stable et supprimez des diffs parasites avant qu’ils n’atteignent vos PR.

Définissez vos règles, renormalisez et outillez vos équipes : vous évitez 80% des frictions liées aux fins de ligne.

Stabilisez vos fins de ligne avec .gitattributes eol

Utilisez notre outil pour vérifier et normaliser les EOL avant de committer.

Analyser mon texte