Mémo Git · Synchroniser

Avoir une identité par dossier

git config --global includeIf."gitdir:~/dev/pro/".path ~/.gitconfig-pro

Une règle includeIf "gitdir:…" de ~/.gitconfig applique un fichier de configuration à tous les dépôts d'un dossier. Tu peux ainsi commiter avec ton e-mail professionnel dans ~/dev/pro/ et ton e-mail personnel ailleurs, sans rien régler dépôt par dépôt.

Ce que ça fait

Une règle includeIf applique un fichier de configuration à tous les dépôts d'un dossier : même e-mail de commit et même clé SSH (core.sshCommand) sans rien régler dépôt par dépôt. Pour Merathon comme pour git en ligne de commande, le réglage propre à un dépôt passe avant la règle.

Un cas d'usage

Sur ton poste pro, ~/dev/pro/ utilise ton compte GitLab, ~/dev/client/ une instance auto-hébergée et ~/dev/perso/ GitHub, chacun avec son e-mail et sa clé.

Attention : Si [user] est écrit après une règle includeIf dans ~/.gitconfig, il passe avant le profil : l'alerte le signale. Une copie de ~/.gitconfig est gardée dans ~/.gitconfig.merathon-original et ~/.gitconfig.merathon-backup.

En ligne de commande

git config --global includeIf."gitdir:~/dev/pro/".path ~/.gitconfig-pro
Applique ~/.gitconfig-pro à tous les dépôts de ~/dev/pro/.
git config --file ~/.gitconfig-pro user.email moi@exemple.fr
Définit l'e-mail des commits de ce dossier.
git config --file ~/.gitconfig-pro core.sshCommand "ssh -i ~/.ssh/id_pro -o IdentitiesOnly=yes"
Utilise une clé SSH précise pour ce dossier.
git config --show-origin user.email
Dans un dépôt : l'e-mail utilisé, et le fichier qui le définit.

Dans Merathon

  1. Préférences → « Profils Git » → « Nouveau profil ».
  2. Choisis le dossier, le nom et l'e-mail des commits, puis le compte et la clé SSH (existante, ou à créer).
  3. Si le dépôt ouvert signe avec un autre e-mail que son profil, une alerte apparaît au-dessus du résumé du commit ; « Utiliser le profil » retire le réglage propre au dépôt.
  4. En HTTPS, le token reste choisi d'après l'instance du remote, et non d'après le dossier.

Questions fréquentes

Pourquoi ma règle includeIf ne s'applique-t-elle pas ?

Le chemin doit se terminer par / pour couvrir tout le dossier, et la commande doit être lancée dans un dépôt de ce dossier. Vérifie aussi qu'aucun [user] n'est écrit après la règle dans ~/.gitconfig, ni dans le dépôt lui-même.

Quel réglage l'emporte ?

Le réglage propre au dépôt passe avant le reste. Dans ~/.gitconfig, pour une même clé, c'est la dernière valeur lue qui compte : un [user] placé après la règle l'emporte sur le profil.

Le profil choisit-il aussi mon token HTTPS ?

Non, pas dans Merathon : la clé SSH suit le dossier, mais le token reste choisi d'après l'instance du remote.

Voir aussi