Est-il possible d’avoir différentes config git pour différents projets

.gitconfig est généralement stocké dans le répertoire user.home .

J’utilise une identité différente pour travailler sur des projets pour CompanyA et autre chose pour CompanyB (principalement le nom / email). Comment puis-je avoir 2 configurations git différentes pour que mes check-ins ne correspondent pas au nom / email?

Le fichier .git/config dans un clone particulier d’un référentiel est local pour ce clone. Tous les parameters placés à cet endroit affecteront uniquement les actions pour ce projet particulier.

(Par défaut, git config modifie .git/config , pas ~/.gitconfig – seulement avec --global t-il ce dernier.)

Il y a 3 niveaux de git config; projet, global et système.

  • projet : les configurations de projet ne sont disponibles que pour le projet en cours et stockées dans le fichier .git / config du répertoire du projet.
  • global : les configurations globales sont disponibles pour tous les projets pour l’utilisateur actuel et stockées dans ~ / .gitconfig.
  • system : Les configurations système sont disponibles pour tous les utilisateurs / projets et stockées dans / etc / gitconfig.

Créez une configuration spécifique au projet, vous devez l’exécuter dans le répertoire du projet:

 $ git config user.name "John Doe" 

Créez une configuration globale:

 $ git config --global user.name "John Doe" 

Créez une configuration système:

 $ git config --system user.name "John Doe" 

Et comme vous pouvez le deviner, le projet remplace le système de substitution global et global.

À partir de la version 2.13 de git, git prend en charge les inclusions de configuration conditionnelle . Dans cet exemple, nous ~/company_a société A dans le répertoire ~/company_a société B dans ~/company_b .

Dans votre .gitconfig vous pouvez mettre quelque chose comme ça.

 [includeIf "gitdir:~/company_a/"] path = .gitconfig-company_a [includeIf "gitdir:~/company_b/"] path = .gitconfig-company_b 

Exemple de contenu de .gitconfig-company_a

 [user] name = John Smith email = john.smith@companya.net 

Exemple de contenu de .gitconfig-company_b

 [user] name = John Smith email = js@companyb.com 

Vous pouvez également pointer la variable d’environnement GIT_CONFIG vers un fichier que git config doit utiliser. Avec GIT_CONFIG=~/.gitconfig-A git config key value la GIT_CONFIG=~/.gitconfig-A git config key value le fichier spécifié est manipulé.

Je le fais pour mon email de la manière suivante:

 git config --global alias.hobbyprofile 'config user.email "me@example.com"' 

Ensuite, lorsque je clone un nouveau projet de travail, je ne peux que lancer git hobbyprofile et celui-ci sera configuré pour utiliser cet e-mail.

Je suis dans le meme bateau. J’ai écrit un petit script bash pour les gérer. https://github.com/thejeffreystone/setgit

 #!/bin/bash # setgit # # Script to manage multiple global gitconfigs # # To save your current .gitconfig to .gitconfig-this just run: # setgit -s this # # To load .gitconfig-this to .gitconfig it run: # setgit -f this # # # # Author: Jeffrey Stone  usage(){ echo "$(basename $0) [-h] [-f name]" echo "" echo "where:" echo " -h Show Help Text" echo " -f Load the .gitconfig file based on option passed" echo "" exit 1 } if [ $# -lt 1 ] then usage exit fi while getopts ':hf:' option; do case "$option" in h) usage exit ;; f) echo "Loading .gitconfig from .gitconfig-$OPTARG" cat ~/.gitconfig-$OPTARG > ~/.gitconfig ;; *) printf "illegal option: '%s'\n" "$OPTARG" >&2 echo "$usage" >&2 exit 1 ;; esac done