Vous utilisez votre ordinateur pour travailler et, plus que jamais, il vous arrive sûrement d’utiliser Git (que feriez-vous sur cet article sinon ?).
Peut-être vous arrive-t-il aussi de travailler sur un projet personnel sur ce même ordinateur ?
Ou de contribuer à un projet Open-Source, toujours sur la même machine.
Vous avez probablement défini une identité (nom + mail) globale à votre machine et vous la surchargée pour chaque projet en fonction du contexte.
Parfait !
Et pourtant malgré ces précautions d’usage, qui n’a jamais commité dans un projet avec une mauvaise identité ? Parfois peut être vous en vous rendu compte tardivement et votre email personnel se retrouve maintenant ad vitam æternam dans les logs d’un projet.
Alors comment essayer de limiter le risque d’erreurs ?
Pourrait-on automatiser la sélection de la bonne identité pour nos projets ?
Et bien, la bonne nouvelle est que la réponse est OUI et que nous allons voir comment juste après.
.gitconfig et includes conditionnels grâce à IncludeIf
Prenons le fichier .gitconfig
, généralement présent dans votre $HOME
.
[user]
name = Jean-Yves Gastaud
email = [email protected]
[alias]
amend = commit --amend
st = status
co = checkout
Ce fichier défini notre identité par défaut et nos aliases globaux.
Grâce à utilisation de la directive includeIf
1 dans notre fichier .gitconfig
, nous pouvons maintenant ajouter des includes conditionnels liés, notamment à des répertoires.
[includeIf "gitdir:/workspace/work/"]
path = ~/.gitconfig-work
[includeIf "gitdir:/workspace/opensource/"]
path = ~/.gitconfig-opensource
[includeIf "gitdir:/workspace/perso/"]
path = ~/.gitconfig-perso
Pour chaque includeIf
défini, il ne nous reste plus qu’à créer le fichier correspondant au chemin que nous avons défini dans path
.
Dans le fichier ~/.gitconfig-work
, nous n’avons donc plus qu’à ajouter ou surcharger les configurations qui nous intéresse.
Exemple :
[user]
email = [email protected]
[core]
editor = "code -w"
Dans ce fichier, on surcharge donc notre email et on ajoute un éditeur de code par défaut.
Maintenant, tout dossier sous le répertoire /workspace/work
bénéficiera automatiquement du chargement des configuration fichier .gitconfig
, surcharger ou compléter par celles du fichier .gitconfig-work
.
Pour vérifier votre configuration, allez dans n’importe quel répertoire sous le répertoire ciblé, /workspace/work
dans notre exemple et lancer la commande git config -l
Vous devriez voir la fusion de vos fichiers de configs.
user.name=Jean-Yves Gastaud
email = [email protected]
alias.amend=commit --amend
alias.st=status
alias.co=checkout
includeif.gitdir:/workspace/work/.path=~/.gitconfig-work
[email protected]
core.editor=code -w
includeif.gitdir:/workspace/opensource/.path=~/.gitconfig-opensource
includeif.gitdir:/workspace/perso/.path=~/.gitconfig-perso
core.repositoryformatversion=0
core.filemode=true
…
Comme vous pouvez le constater, les 2 mails définis sont présents dans le listing.
Le dernier “parlant” ayant raison, c’est donc bien la valeur du fichier .gitconfig-work
qui sera considéré lors du commit.
Vous remarquerez aussi que les 2 autres includes sont listés mais n’ajoutent pas de nouvelles variables / surcharges car leur condition d’application n’est pas remplie.
Cela nous laisse toujours la possibilité de surcharger, localement au repository, toutes configurations souhaitées, comme avant.
En quelques lignes et une gestion simple de vos répertoires de travail, il vous est donc possible de ne plus risquer de vous tromper dans le changement de vos identités.
-
Depuis la version 2.13 de Git (mai 2017). Documentation sur les Includes dans Git ↩︎