web-dev-qa-db-fra.com

Est-il possible d'avoir différentes configurations 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 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?

232
priya

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.)

205
Amber

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

  • projet: Les configurations de projet ne sont disponibles que pour le projet actuel et stockées dans .git/config dans le répertoire du projet.
  • global: Les configurations globales sont disponibles pour tous les projets de l'utilisateur actuel et sont stockées dans ~/.gitconfig.
  • système: Les configurations du système sont disponibles pour tous les utilisateurs/projets et sont 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 global et global.

229
sarigalin

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]
154
crea1

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.

12
ivand58

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é.

9
Stefan Näwe

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" 
8
mim

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 motif foo/ devient foo/**. 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]
7
bcag2

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.

1
Erich Meissner

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
1
netizen24601