Portées de Configuration Git : Paramètres Globaux, Système et Spécifiques au Dépôt Expliqués
Comprenez les portées de configuration système, globale et locale de Git, où elles se trouvent et comment la précédence affecte vos paramètres.
Portées de Configuration Git : Paramètres Globaux, Système et Spécifiques au Dépôt Expliqués
Les portées de configuration Git expliquent pourquoi Git utilise parfois un nom, un email, un éditeur, un outil de fusion ou une branche par défaut différent de celui attendu. La même clé peut exister dans plusieurs fichiers, et le fichier le plus spécifique l'emporte.
Une fois que vous savez où se trouvent les paramètres système, globaux et locaux, vous pouvez définir des valeurs par défaut personnelles sans modifier accidentellement tous les dépôts de la machine.
La Hiérarchie de Configuration Git : Ordre de Précédence
Git lit les paramètres de configuration à partir de plusieurs emplacements, et ces emplacements sont traités dans un ordre de précédence spécifique. Lorsque la même clé de configuration est définie dans plusieurs portées, le paramètre de la portée la plus spécifique remplace le paramètre de la portée la moins spécifique. Cette hiérarchie est cruciale à comprendre pour un comportement prévisible :
- Configuration Spécifique au Dépôt (Locale) : Ces paramètres sont stockés dans le fichier
.git/configd'un dépôt spécifique. Ils sont les plus spécifiques et prennent le pas sur les paramètres globaux et système. Idéal pour les règles propres à un projet. - Configuration Globale (Utilisateur) : Ces paramètres s'appliquent à tous les dépôts associés à un compte utilisateur particulier sur une machine. Ils sont stockés dans un fichier
~/.gitconfig(sur Linux/macOS) ouC:\Utilisateurs\<nom_utilisateur>\.gitconfig(sur Windows). Les paramètres globaux remplacent les paramètres système. - Configuration au Niveau Système : Ces paramètres s'appliquent à tous les utilisateurs et tous les dépôts sur une machine donnée. Ils se trouvent généralement dans
/etc/gitconfig(sur Linux/macOS) ouC:\Program Files\Git\etc\gitconfig(sur Windows). Les paramètres système sont les moins spécifiques et sont remplacés par les paramètres globaux et locaux.
Remarque : Git peut également lire $XDG_CONFIG_HOME/git/config ou ~/.config/git/config comme fichier de configuration au niveau utilisateur. Si ce fichier et ~/.gitconfig existent tous les deux, Git lit les deux ; les valeurs de ~/.gitconfig prennent normalement le pas car il est lu plus tard.
1. Configuration au Niveau Système (--system)
Les configurations au niveau système sont la portée la plus large, affectant tous les utilisateurs de Git et tous les dépôts sur une machine spécifique. Ces paramètres sont généralement utilisés pour des valeurs par défaut à l'échelle de la machine ou des politiques imposées par les administrateurs système.
Où est-elle stockée
- Linux/macOS :
/etc/gitconfig - Windows :
C:\Program Files\Git\etc\gitconfig(ou chemin similaire selon l'installation)
Quand l'utiliser
- Valeurs par défaut à l'échelle de la machine : Configurer
core.editoroucolor.uipar défaut pour tous les utilisateurs. - Politiques à l'échelle de l'entreprise : S'assurer que tous les développeurs sur une machine partagée respectent certains comportements Git.
- Paramètres de sécurité : Désactiver certaines opérations dangereuses pour tous les utilisateurs.
Exemples Pratiques
Pour afficher tous les paramètres au niveau système :
git config --system --list
Pour définir un nom d'utilisateur par défaut à l'échelle du système (nécessite des privilèges administratifs) :
sudo git config --system user.name "Utilisateur Git par Défaut"
Pour configurer un éditeur de texte par défaut à l'échelle du système :
sudo git config --system core.editor "nano"
Avertissement : La modification des configurations au niveau système nécessite des privilèges administratifs et affecte toute utilisation de Git sur la machine. Utilisez avec prudence et uniquement lorsque cela est nécessaire.
2. Configuration au Niveau Global (--global)
Les configurations globales sont spécifiques à l'utilisateur, s'appliquant à tous les dépôts Git avec lesquels vous interagissez sur votre compte utilisateur sur une machine particulière. C'est la portée la plus courante pour les paramètres personnels.
Où est-elle stockée
- Linux/macOS :
~/.gitconfig - Windows :
C:\Utilisateurs\<nom_utilisateur>\.gitconfig
Quand l'utiliser
- Votre identité personnelle : Définir votre
user.nameetuser.emailqui seront utilisés par défaut pour tous vos commits. - Alias préférés : Définir des raccourcis pour les commandes Git fréquemment utilisées.
- Préférences d'interface par défaut : Définir
color.uisurautoou configurer votre éditeur de texte préféré (core.editor). - Comportement de branchement par défaut : Par exemple,
pull.rebase.
Exemples Pratiques
Pour afficher tous les paramètres au niveau global :
git config --global --list
Pour définir votre nom d'utilisateur et email globaux (première étape hautement recommandée pour tout utilisateur Git) :
git config --global user.name "Votre Nom"
git config --global user.email "[email protected]"
Pour créer un alias global pour git status :
git config --global alias.st "status"
Maintenant, vous pouvez taper git st au lieu de git status.
Pour définir votre éditeur préféré :
git config --global core.editor "code --wait"
Cela définit VS Code comme éditeur par défaut pour les opérations Git comme les messages de commit.
Astuce : Définissez toujours votre user.name et user.email globaux tôt pour garantir que vos commits sont correctement attribués.
3. Configuration Spécifique au Dépôt (Locale)
Les configurations spécifiques au dépôt, ou locales, sont les plus granulaires. Ces paramètres s'appliquent uniquement au dépôt Git particulier dans lequel vous travaillez actuellement. Ils sont primordiaux pour adapter le comportement de Git aux exigences uniques d'un seul projet.
Où est-elle stockée
- Dans le fichier
.git/configà l'intérieur du répertoire racine de votre dépôt Git.
Quand l'utiliser
- Identité spécifique au projet : Utiliser une adresse email différente pour les projets professionnels par rapport aux projets personnels (par exemple,
[email protected]pour le travail,[email protected]pour le personnel). - Hooks spécifiques au projet : Configurer des hooks
pre-commitoupost-mergeuniques au dépôt. - URL distantes : Définir plusieurs dépôts distants ou des URL de push/pull spécifiques.
- Paramètres spécifiques à une branche : Par exemple, définir
branch.<nom>.remoteoubranch.<nom>.merge. - Configuration de base : Définir
core.autocrlfoucore.whitespacepour un projet spécifique en fonction de ses normes de codage.
Exemples Pratiques
Naviguez d'abord vers le répertoire racine de votre dépôt.
Pour afficher tous les paramètres locaux (et les paramètres globaux/système hérités) :
git config --list
Pour définir une adresse email spécifique au projet qui remplace votre email global :
git config user.email "[email protected]"
Pour vérifier les objets reçus lors d'un git fetch ou git pull pour un projet spécifique :
git config fetch.fsckObjects true
Pour définir un alias local spécifique à ce projet (par exemple, pour une commande complexe spécifique au projet) :
git config alias.log-compact "log --pretty=oneline --abbrev-commit --graph"
Meilleure Pratique : Utilisez les configurations locales pour tout paramètre qui ne devrait pas affecter d'autres dépôts. Cela maintient vos paramètres globaux propres et évite des impacts accidentels sur des projets non liés.
Affichage des Paramètres de Configuration
Au-delà de --list, vous pouvez inspecter des clés de configuration individuelles ou spécifier directement la portée.
Affichage de Tous les Paramètres (--list)
Pour voir toutes les configurations qui s'appliquent à votre contexte actuel, y compris les paramètres système, globaux et locaux, et comment ils se résolvent en fonction de la précédence :
git config --list --show-origin
Cette commande est très utile car elle montre non seulement les paires clé-valeur mais aussi le fichier d'origine de chaque paramètre. Cela aide énormément au débogage lorsque vous n'êtes pas sûr quel paramètre prend le pas.
Affichage d'une Clé Spécifique
Pour vérifier la valeur d'une clé de configuration spécifique (par exemple, user.name) :
git config user.name
Git retournera la valeur effective, résolue selon la hiérarchie.
Pour vérifier la valeur d'une clé spécifique à une portée spécifique :
git config --global user.name # Affiche uniquement le user.name global
git config --system core.editor # Affiche uniquement le core.editor système
Résolution des Conflits et Précédence
Comprendre comment Git résout les conflits est essentiel pour résoudre les comportements inattendus. Lorsque git config --list est exécuté dans un dépôt, Git présente les paramètres effectifs. Si user.email est défini globalement et localement, le paramètre local sera affiché car il prend le pas.
Illustrons avec un exemple :
- Système :
/etc/gitconfigauser.name = "Utilisateur Système par Défaut" - Global :
~/.gitconfigauser.name = "Mon Nom Global"etuser.email = "[email protected]" - Local :
.git/configauser.name = "Utilisateur Spécifique au Projet"etuser.email = "[email protected]"
Si vous êtes dans le dépôt local et exécutez git config --list, vous verriez :
user.name=Utilisateur Spécifique au Projet(Local remplace Global, qui remplace Système)[email protected](Local remplace Global)
Si le dépôt local n'avait pas user.name configuré, alors git config user.name retournerait Mon Nom Global.
Cet effet en cascade offre une flexibilité immense. Vous définissez vos préférences générales globalement, puis ne remplacez que ce qui est nécessaire au niveau du projet, gardant ainsi votre environnement global propre et vos environnements de projet adaptés.
Cas d'Utilisation Pratiques et Meilleures Pratiques
- Identité Utilisateur : Définissez toujours votre
user.nameetuser.emailglobaux. Remplacezuser.emaillocalement uniquement lorsque les exigences du projet imposent une adresse différente (par exemple, comptes professionnels vs personnels). - Alias : Définissez des alias courants (comme
stpourstatus,copourcheckout,brpourbranch) globalement pour la productivité personnelle. Utilisez les alias locaux avec parcimonie pour des commandes très spécifiques et complexes au projet. - Hooks : Stockez les hooks utilitaires généraux (par exemple, des vérifications de formatage simples) globalement si vous souhaitez qu'ils s'appliquent à tous les dépôts. Pour une intégration CI/CD complexe spécifique au projet ou une application de style de code, utilisez les hooks de dépôt locaux, souvent gérés par les contributeurs du projet.
- Éditeurs : Définissez
core.editorglobalement à votre éditeur de texte préféré. Cela garantit que Git utilise votre outil préféré pour les messages de commit, les instructions de rebase, etc., dans tout votre travail. - Espaces Blancs et Fins de Ligne :
core.autocrlfetcore.whitespacesont des éléments de configuration courants. Les définir globalement peut être suffisant pour la plupart, mais des projets spécifiques peuvent nécessiter des remplacements locaux s'ils ont des conventions strictes ou inhabituelles (par exemple, un ancien projet qui utilise exclusivement CRLF sur Linux).
Conclusion Finale
Utilisez la config globale pour votre identité et préférences normales, la config locale pour les règles spécifiques au projet, et la config système uniquement lorsqu'une valeur par défaut à l'échelle de la machine est intentionnelle. Lorsque Git se comporte différemment que prévu, git config --list --show-origin est le moyen le plus rapide de trouver le fichier responsable.