444 votes

Est-il possible d'avoir une configuration Git différente pour différents projets ?

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

J'utilise une identité différente pour travailler sur des projets pour l'entreprise A et une autre pour l'entreprise B (principalement le nom / l'email). Comment puis-je avoir deux configurations Git différentes pour que mes check-in ne soient pas associés au nom / à l'email ?

388voto

sarigalin Points 394

Il existe 3 niveaux de configuration git : projet, global et système.

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

_Note : Les configurations du projet sont locales à une seule copie/clone particulière de ce repo particulier, et doivent être réappliquées si le repo est recloné proprement depuis le distant. Il modifie un fichier local qui est pas envoyé au distant avec un commit/push._

353voto

Amber Points 159296

Le site .git/config dans un clone particulier d'un référentiel est local à 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 pas ~/.gitconfig - seulement avec --global modifie cette dernière).

329voto

crea1 Points 4164

À partir de la version 2.13 de git, git supporte La configuration conditionnelle comprend . Dans cet exemple, nous clonons les dépôts de l'entreprise A en ~/company_a et les dépôts de l'entreprise 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

61voto

bcag2 Points 419

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 foo et tout ce qu'il contient, de manière récursive.

J'utilise donc dans mon cas,
~/.gitconfig :

[user] # as default, personal needs
    email = myalias@personal-domain.fr
    name = bcag2
[includeIf "gitdir:~/workspace/"] # job needs, like workspace/* so all included projects
    path = .gitconfig-job

# all others section: core, alias, log…

Donc, si le répertoire du projet est dans mon ~/wokspace/ Les paramètres par défaut de l'utilisateur sont remplacés par
~/.gitconfig-job :

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

18voto

Mim Armand Points 409

Pour être explicite, vous pouvez également utiliser --local à utiliser fichier de configuration du référentiel actuel :

git config --local user.name "John Doe"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X