Aller au contenu

Git : configuration

Git se configure avec git config. Les exemples utilisent des valeurs génériques.

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)
Fenêtre de terminal
git config --global user.name "Prénom Nom"
git config user.email "pro@exemple.com" # seulement pour ce dépôt
git config --list --show-origin # toutes les valeurs, avec leur fichier d'origine
git config --get user.email
git config --global --unset core.editor
git config --global --edit # ouvre ~/.gitconfig
Fenêtre de terminal
git config --global init.defaultBranch main
git config --global pull.ff only # git pull refuse les fusions non voulues
git config --global push.autoSetupRemote true # git push crée la branche distante au premier envoi
git config --global fetch.prune true # nettoie les branches distantes supprimées
git config --global rebase.autoStash true
git 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écurrents
git config --global core.autocrlf input # fins de ligne : convertit CRLF en LF à la validation (Linux, macOS)
Fenêtre de terminal
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.

Fenêtre de terminal
git config --global core.excludesFile ~/.gitignore_global
printf '.DS_Store\n*.swp\n.idea/\n.vscode/\n' > ~/.gitignore_global

Les 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.

Fichier à la racine du dépôt, qui règle le traitement de certains fichiers :

* text=auto eol=lf
*.sh text eol=lf
*.png binary
package-lock.json -diff
  • text=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).

~/.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 yes

Avec 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.

Fenêtre de terminal
chmod 600 ~/.ssh/config
ssh -T git@git.exemple.com

Identité différente selon le dossier : includeIf

Section intitulée « Identité différente selon le dossier : includeIf »
~/.gitconfig
[user]
name = Prénom Nom
email = perso@exemple.com
[includeIf "gitdir:~/travail/"]
path = ~/.gitconfig-travail
~/.gitconfig-travail
[user]
email = prenom.nom@entreprise.exemple.com

Les dépôts situés dans ~/travail/ utilisent automatiquement l’adresse professionnelle.

Fenêtre de terminal
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign true
git log --show-signature -1

La 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.

Fenêtre de terminal
git config --global color.ui auto
git config --global core.pager "less -FRX"
git config --global log.date iso
git config --global column.ui auto
git config --global branch.sort -committerdate # branches triées par date de dernier commit

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 :

Fenêtre de terminal
git config core.hooksPath .githooks
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