Multi configuration Git

Intro
Une des premières choses que l’on fait quand on configure son poste pour utiliser Git, c’est de renseigner notre nom d’utilisateur et un email qui sera utilisé pour tous les commits fait sur notre machine. Pour cela, soit on édite à la main le fichier ~/.gitconfig
soit on lance les deux commandes suivantes :
|
|
Un commit avec cette configuration donne quelque chose du style :
|
|
Cela fonctionne très bien si l’on utilise qu’une seule plateforme pour publier notre code source. Mais qu’en est-il si l’on doit gérer plusieurs plateformes? J’utilise Gitlab chez Max, un Gitlab “on premise” chez mon client et Github pour des projets perso.
Comment modifier mon adresse mail selon le contexte dans lequel je travaille?
- Je peux utiliser des utilisateurs différents qui auront leur propre configuration dans le fichier
~/.gitconfig
. - Je pourrais ajouter un alias me permettant de modifier le mail rapidement via la commande
git config --global user.email <email>
. - Ne rien avoir à faire grâce aux conditional includes.
C’est cette dernière solution que l’on va détailler dans cet article.
Les conditional includes
A partir de la version 2.13 de Git, il est possible de charger une configuration différente en fonction de l’arborescence de fichier dans laquelle se trouve notre dépôt.
Pour cet exemple je vais configurer 3 adresses différentes:
- une adresse pour chez le client
francois.dubrez@somecompany.com
- une adresse pour notre propre entreprise
soicnarf.zerbud@maxds.fr
- une adresse perso pour nos contributions sur Github par exemple
francois.dubrez@whatever.com
Comme vu plus haut on a configuré en adresse par défaut notre adresse personnelle: francois.dubrez@whatever.com
via la commande git config --global user.email <email>
.
On va créer une arborescence pour nos 3 “contextes” Git.
|
|
Dans notre fichier ~/.gitconfig
, on ajoute la configuration nécessaire:
|
|
On crée ensuite les fichiers de configuration spécifiques:
|
|
Et voila, maintenant à partir du moment où l’on se trouve dans un dépôt en aval d’un des dossiers client,maxds ou github. Git utilisera la configuration surchargée avec la bonne adresse pour le commit.
Pour aller plus loin
Le port ssh (22) est bloqué dans mon réseau d’entreprise
Il peut arriver qu’il ne soit pas possible de pouvoir cloner un projet via ssh car le port 22 est bloqué.
Si la plateforme le propose, il est possible de modifier notre configuration SSH pour qu’elle utilise un autre port pour cette plateforme.
Exemple pour attaquer gitlab.com sur le port 443 plutôt que le port 22.
|
|
SSH à travers un proxy
Il est également probable que le réseau de votre entreprise se trouve derrière un proxy qui bloque vos requêtes.
Pour exécuter vos commandes via SSH au travers d’un proxy HTTP, vous pouvez utiliser corkscrew.
|
|
2 comptes différents sur une même plateforme
Il peut arriver que l’on utilise la version SAAS d’un même service (Gitlab ou Github) pour deux comptes différents. Par exemple celui de notre client et notre compte perso.
Pour que l’on puisse utiliser l’authentification SSH il est nécessaire d’utiliser 2 clés SSH distinctes afin que la plateforme puisse nous authentifier auprès de la bonne organisation. Afin que la conf SSH puisse savoir quelle clé utiliser on utilise des URLs fictives de la plateforme qui servira à les différencier.
Comme plus haut on a toujours une conf git par répertoire
|
|
Ensuite on surcharge l’URL à utiliser par git en fonction du répertoire courant.
|
|
|
|
Enfin dans notre configuration SSH, on référence la clé publique, associée au compte souhaité, en fonction de l’URL utilisée.
Ainsi, perso.gitlab.com
utilisera la clef SSH ~/.ssh/gitlab_perso
pour se connecter sur gitlab.com
et maxds.gitlab.com
utilisera la clef SSH ~/.ssh/gitlab_maxds
pour se connecter sur gitlab.com
.
On peut l’assimiler à une réécriture de l’URL host pour utiliser le host valide de gitlab.
|
|
Remerciements
Merci à @Jeremie_Hrl et Audren pour leurs conseils et contributions à cet article.