
Utilisation des attributs Git
25 janv. 2025
- Catégories
- DevOps & SRE
- Tags
- Git
- GitOps
Ne ratez pas nos articles sur l'open source, le big data et les systèmes distribués, fréquence faible d’un email tous les deux mois.
Les attributs Git ne sont pas un concept que l’on apprend dans les premiers temps lorsqu’on se familiarise avec Git. Même les développeurs expérimentés ne les connaissent pas toujours en raison de leur utilisation peu fréquente. Cependant, lorsqu’on travaille sur des projets plus importants ou open-source avec plusieurs collaborateurs, l’utilisation des attributs Git peut s’avérer beaucoup plus efficace que de les ignorer. Cet article présente les attributs Git et expose certains cas d’utilisation.
Introduction aux attributs Git
Les attributs Git permettent de personnaliser le comportement de Git différemment pour chaque dépôt. Ils appliquent des paramètres spécifiques aux sous-répertoires ou sous-ensembles de fichiers. Ces paramètres peuvent configurer des éléments tels que la normalisation des fins de ligne pour les fichiers texte ou les algorithmes de diff pour les fichiers binaires.
Les attributs Git sont définis soit dans le fichier .gitattributes
de l’un de vos répertoires (généralement à la racine du projet), soit dans le fichier .git/info/attributes
. Ce dernier est utilisé lorsque vous ne souhaitez pas que les attributs soient contribués au projet.
Chaque ligne dans ces fichiers suit le format suivant :
pattern attr1 attr2 ...
La propriété pattern
correspond aux chemins et utilise les mêmes règles que dans les fichiers .gitignore
, avec quelques exceptions :
- les motifs négatifs sont interdits
- les motifs qui correspondent à un répertoire ne correspondent pas récursivement aux chemins à l’intérieur de ce répertoire (donc l’utilisation de la syntaxe avec slash final
path/
est inutile dans un fichier d’attributs ; utilisez plutôtpath/**
)
Chaque attribut peut avoir l’un de ces états pour un motif donné :
- Défini
Il est spécifié simplement en listant le nom de l’attribut, par exemplepattern attr1
. - Non défini
Il est spécifié en préfixant le nom de l’attribut avec-
, par exemplepattern -attr1
. - Défini avec une valeur
Il est spécifié en listant le nom de l’attribut suivi de=
et de sa valeur, par exemplepattern attr1=value
. - Non spécifié
Aucun motif ne correspond au chemin ou un motif n’a pas l’attribut.
Voici quelques exemples d’attributs :
text
- active et contrôle la normalisation des fins de ligneeol
- définit un style spécifique de fin de ligne à utiliser dans le répertoire de travailbinary
- un attribut macro intégré qui désactive les attributstext
etdiff
, équivalent à-text -diff
diff
- affecte la façon dont Git génère les diffs pour des fichiers particuliers
Les informations détaillées et la liste complète des attributs sont disponibles dans la documentation officielle.
Cas d’utilisation : Configuration des fins de ligne
Chaque fois que vous appuyez sur Entrée
sur votre clavier lors de la rédaction d’un document texte, vous ajoutez un caractère invisible appelé fin de ligne. Par défaut, Windows utilise à la fois un caractère de retour chariot et un caractère de saut de ligne (CRLF) représentés par les caractères de contrôle \r\n
, tandis que les systèmes macOS et Linux n’utilisent que le caractère LF (\n
). Voici un bon article sur l’histoire de ces caractères.
Des conflits peuvent survenir lorsque vous et vos collaborateurs travaillez dans des environnements différents et faites des commits dans le même dépôt Git. N’importe qui peut valider des fichiers utilisant différentes fins de ligne, et lorsque vous les sauvegardez, votre éditeur peut être configuré pour réécrire les fins de ligne pour correspondre à votre environnement. En conséquence, Git détecte une différence. Vous pouvez exécuter la commande git diff
pour voir l’avertissement correspondant :
warning: CRLF will be replaced by LF in path/to/file.
The file will have its original line endings in your working directory
Pour éviter ce problème, vous pouvez configurer Git pour gérer automatiquement et correctement les fins de ligne dans le dépôt courant. Ce paramètre dans le fichier .gitattributes
(ou dans .git/info/attributes
) traite tous les fichiers comme des fichiers texte et les convertit vers les fins de ligne du système d’exploitation lors du checkout et de retour au style LF lors du commit automatiquement.
* text eol=lf
Notez qu’en raison de ce paramètre, Git altère les fichiers binaires dans le dépôt lors de leur ajout à l’index. Dans la section suivante, nous verrons comment éviter cette situation.
Cas d’utilisation : Identification des fichiers binaires
L’attribut binary
désigne tous les fichiers qui sont véritablement binaires. Git comprend que les fichiers spécifiés ne sont pas du texte et ne tentera pas de les modifier. Par exemple, pour les fichiers JPG et PNG, vous pouvez mettre les paramètres suivants :
*.png binary
*.jpg binary
binary
est un attribut macro intégré qui équivaut à :
-diff -merge -text
Vous pouvez définir des attributs macro personnalisés dans les fichiers d’attributs Git au niveau supérieur d’un dépôt.
Cas d’utilisation : Différences dans les fichiers binaires
Git peut être configuré pour différencier les fichiers binaires. C’est très utile, par exemple, pour résoudre l’un des problèmes les plus ennuyeux de versionnement de documents comme Microsoft Word ou OpenDocument.
Le paramètre suivant configure la différenciation des fichiers Microsoft Word :
*.docx diff=word
Cela indique à Git que tous les fichiers .docx
doivent utiliser le filtre word
lorsque vous essayez de voir une différence. Mais ce filtre doit être configuré pour utiliser le programme docx2txt
qui convertit les documents Word en fichiers texte lisibles. Vous pouvez suivre ce tutoriel pour apprendre comment l’installer et l’appliquer.
Conclusion
Cet article a brièvement présenté les attributs Git et exposé certains de leurs cas d’utilisation.