.gitconfig
est généralement stocké dans le répertoire user.home
.
J'utilise une identité différente pour travailler sur des projets de la société A et quelque chose d'autre pour la société B (principalement le nom/l'adresse électronique). Comment puis-je avoir deux configurations Git différentes pour que mes enregistrements ne correspondent pas au nom/à l'adresse e-mail?
Le fichier .git/config
d'un clone particulier d'un référentiel est local pour ce clone. Tous les paramètres qui y sont placés n’affecteront que les actions de ce projet particulier.
(Par défaut, git config
modifie .git/config
, et non ~/.gitconfig
- ce n'est qu'avec --global
qu'il modifie ce dernier.)
Il y a 3 niveaux de config git; projet, global et système.
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 global et global.
Depuis la version 2.13 de git, git prend en charge la configuration conditionnelle inclut . Dans cet exemple, nous clonons les pensions de la société A dans le répertoire ~/company_a
et les pensions de la société B dans ~/company_b
.
Dans votre .gitconfig
vous pouvez mettre quelque chose comme ceci.
[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 = [email protected]
Exemple de contenu de .gitconfig-company_b
[user]
name = John Smith
email = [email protected]
Je le fais pour mon email de la manière suivante:
git config --global alias.hobbyprofile 'config user.email "[email protected]"'
Ensuite, lorsque je clone un nouveau projet de travail, il ne me reste plus qu'à exécuter git hobbyprofile
et il sera configuré pour utiliser ce courrier électronique.
Vous pouvez également faire pointer la variable d'environnement GIT_CONFIG
vers un fichier que git config
doit utiliser. Avec GIT_CONFIG=~/.gitconfig-A git config key value
, le fichier spécifié est manipulé.
Pour être explicite, vous pouvez également utiliser --local
pour utiliser fichier de configuration du référentiel actuel:
git config --local user.name "John Doe"
Merci @ crea1
Une petite variante:
Comme il est écrit sur https://git-scm.com/docs/git-config#_includes :
Si le motif se termine par
/
,**
sera automatiquement ajouté. Par exemple, le motiffoo/
devientfoo/**
. En d'autres termes, il correspond récursivement àfoo
et à tout ce qu'il y a à l'intérieur.
Donc j'utilise dans mon cas:
[user] # as default, personal needs
email = [email protected]
name = bcag2
[includeIf "gitdir:~/workspace/"] # job needs, like workspace/* so all included projects
path = .gitconfig-job
Donc, si le répertoire du projet est dans mon ~/wokspace/
, les paramètres utilisateur par défaut sont remplacés par:
[user]
name = John Smith
email = [email protected]
J'ai eu une erreur en essayant de git stash
mes modifications locales. L'erreur de git disait "S'il vous plaît dites-moi qui vous êtes" et m'a ensuite dit: "Exécutez git config --global user.email "[email protected]
et git config --global user.name "Your name"
pour définir l'identité par défaut de votre compte." Cependant, vous devez Omit --global pour définir l’identité uniquement dans votre référentiel actuel.
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 <[email protected]>
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