Git : configuration
Git se configure avec git config. Les exemples utilisent des valeurs génériques.
Les trois niveaux
Section intitulée « Les trois niveaux »| Niveau | Option | Fichier | Portée |
|---|---|---|---|
| Système | --system |
/etc/gitconfig |
Tous les utilisateurs de la machine |
| Global | --global |
~/.gitconfig |
L’utilisateur |
| Local | (aucune) | .git/config |
Le dépôt courant (prioritaire) |
git config --global user.name "Prénom Nom"git config user.email "pro@exemple.com" # seulement pour ce dépôtgit config --list --show-origin # toutes les valeurs, avec leur fichier d'originegit config --get user.emailgit config --global --unset core.editorgit config --global --edit # ouvre ~/.gitconfigRéglages recommandés
Section intitulée « Réglages recommandés »git config --global init.defaultBranch maingit config --global pull.ff only # git pull refuse les fusions non vouluesgit config --global push.autoSetupRemote true # git push crée la branche distante au premier envoigit config --global fetch.prune true # nettoie les branches distantes suppriméesgit config --global rebase.autoStash truegit config --global merge.conflictStyle zdiff3 # conflits plus lisibles (version de base incluse)git config --global diff.colorMoved default # met en évidence le code déplacégit config --global rerere.enabled true # mémorise la résolution des conflits récurrentsgit config --global core.autocrlf input # fins de ligne : convertit CRLF en LF à la validation (Linux, macOS)git config --global alias.st "status -sb"git config --global alias.co "checkout"git config --global alias.sw "switch"git config --global alias.lg "log --oneline --graph --decorate --all"git config --global alias.last "log -1 --stat"git config --global alias.unstage "restore --staged"git config --global alias.amend "commit --amend --no-edit"Utilisation : git lg, git st. Les alias sont dans la section [alias] de ~/.gitconfig.
Fichiers ignorés pour tous les dépôts
Section intitulée « Fichiers ignorés pour tous les dépôts »git config --global core.excludesFile ~/.gitignore_globalprintf '.DS_Store\n*.swp\n.idea/\n.vscode/\n' > ~/.gitignore_globalLes motifs propres à la machine (éditeur, système) se placent ici ; ceux du projet restent dans le .gitignore du dépôt. Un motif local et non partagé s’écrit dans .git/info/exclude.
.gitattributes
Section intitulée « .gitattributes »Fichier à la racine du dépôt, qui règle le traitement de certains fichiers :
* text=auto eol=lf*.sh text eol=lf*.png binarypackage-lock.json -difftext=auto eol=lf: normalise les fins de ligne en LF.binary: aucun traitement ni diff texte.-diff: n’affiche pas les différences de ce fichier (volumineux).
Configuration SSH pour les serveurs Git
Section intitulée « Configuration SSH pour les serveurs Git »~/.ssh/config :
Host git.exemple.com HostName git.exemple.com User git IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes
Host git-perso HostName git.exemple.com User git IdentityFile ~/.ssh/id_perso IdentitiesOnly yesAvec le second alias, un dépôt s’utilise avec l’adresse git@git-perso:equipe/monprojet.git : utile pour plusieurs comptes sur un même serveur.
chmod 600 ~/.ssh/configssh -T git@git.exemple.comIdentité différente selon le dossier : includeIf
Section intitulée « Identité différente selon le dossier : includeIf »[user] name = Prénom Nom email = perso@exemple.com
[includeIf "gitdir:~/travail/"] path = ~/.gitconfig-travail[user] email = prenom.nom@entreprise.exemple.comLes dépôts situés dans ~/travail/ utilisent automatiquement l’adresse professionnelle.
Signer les commits avec une clé SSH
Section intitulée « Signer les commits avec une clé SSH »git config --global gpg.format sshgit config --global user.signingkey ~/.ssh/id_ed25519.pubgit config --global commit.gpgsign truegit log --show-signature -1La clé publique doit aussi être déclarée sur le serveur comme clé de signature pour que les commits soient affichés comme vérifiés.
Rendre les sorties plus lisibles
Section intitulée « Rendre les sorties plus lisibles »git config --global color.ui autogit config --global core.pager "less -FRX"git config --global log.date isogit config --global column.ui autogit config --global branch.sort -committerdate # branches triées par date de dernier commitHooks : scripts automatiques
Section intitulée « Hooks : scripts automatiques »Les hooks sont des scripts exécutés à certains moments (avant un commit, avant un envoi…). Voir Bonnes pratiques. Pour les partager dans le dépôt :
git config core.hooksPath .githooksDépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
| Mauvaise adresse e-mail dans les commits | git config --show-origin user.email : une valeur locale masque la valeur globale |
| Fins de ligne modifiées (fichiers entièrement en différence) | Ajouter .gitattributes avec * text=auto eol=lf |
| Alias non reconnu | git config --get-regexp alias |
| Les conflits sont difficiles à lire | merge.conflictStyle zdiff3 |
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Manuel : Git Configuration et
git config - Suite : Bonnes pratiques