75 votes

.gitconfig différent pour un sous-répertoire donné ?

J'utilise deux e-mails git différents, un pour le travail et un pour les projets publics. Au départ, je pensais que je pouvais créer un .gitconfig séparé avec un e-mail différent dans un dossier où se trouvent tous mes dépôts publics, et que git respecterait cela, mais hélas, il semble que cela ne fonctionne pas. Quelle est la meilleure façon de configurer facilement quelque chose de similaire ? Je veux éviter d'avoir à modifier spécifiquement l'e-mail dans chaque dépôt public.

119voto

Chris Crewdson Points 541

La meilleure façon de le faire depuis git 2.13 est d'utiliser des inclusions conditionnelles .

Un exemple (copié d'une réponse ici ):

Configuration globale ~/.gitconfig

 [user]
    name = John Doe
    email = john@doe.tld

[includeIf "gitdir:~/work/"]
    path = ~/work/.gitconfig

Configuration spécifique au travail ~/work/.gitconfig

 [user]
    email = john.doe@company.tld

9voto

Torsten Walter Points 3213

Comme mentionné dans d'autres réponses, vous ne pouvez pas vraiment définir vos informations d'identification par répertoire. Mais git vous permet de le faire par référentiel.

 # Require setting user.name and email per-repo
$ git config --global user.useConfigOnly true

De cette façon, lors de votre premier commit, vous obtiendrez une erreur vous demandant de fournir votre nom et votre adresse e-mail. Dans votre dossier de dépôt, ajoutez vos informations d'identification une fois à votre dépôt et à partir de là, vous vous engagez avec cette identité :

 $ cd path/to/repo
$ git config user.name My Name
$ git config user.email mail@example.com

7voto

pithyless Points 984

Après être passé à ZSH, voici ma solution révisée au problème d'utilisation des "profils" déclenchés lors des changements de répertoire. L'avantage de cette solution est qu'elle peut être utilisée pour d'autres paramètres.

Insérez ceci dans votre configuration zsh :

 #
# Thanks to: Michael Prokop. 
# More documentation: 
# http://git.grml.org/?p=grml-etc-core.git;f=etc/zsh/zshrc;hb=HEAD#l1120
#
CHPWD_PROFILE='default'
function chpwd_profiles() {
    local -x profile

    zstyle -s ":chpwd:profiles:${PWD}" profile profile || profile='default'
    if (( ${+functions[chpwd_profile_$profile]} )) ; then
        chpwd_profile_${profile}
    fi

    CHPWD_PROFILE="${profile}"
    return 0
}
chpwd_functions=( ${chpwd_functions} chpwd_profiles )

chpwd_profile_default # run DEFAULT profile automatically

Et puis ailleurs dans vos personnalisations zsh git :

 zstyle ':chpwd:profiles:/home/user/work(|/|/*)'  profile work
zstyle ':chpwd:profiles:/home/user/fun(|/|/*)'   profile fun

# configuration for profile 'default':
chpwd_profile_default()
{
  [[ ${profile} == ${CHPWD_PROFILE} ]] && return 1
  print "chpwd(): Switching to profile: default"

  export GIT_AUTHOR_EMAIL="default@example.com"
  export GIT_COMMITTER_EMAIL="default@example.com"
}

# configuration for profile 'fun':
chpwd_profile_fun()
{
  [[ ${profile} == ${CHPWD_PROFILE} ]] && return 1
  print "chpwd(): Switching to profile: $profile"

  export GIT_AUTHOR_EMAIL="fun@example.com"
  export GIT_COMMITTER_EMAIL="fun@example.com"
}

# configuration for profile 'work':
chpwd_profile_work()
{
  [[ ${profile} == ${CHPWD_PROFILE} ]] && return 1
  print "chpwd(): Switching to profile: $profile"

  export GIT_AUTHOR_EMAIL="work@example.com"
  export GIT_COMMITTER_EMAIL="work@example.com"
}

3voto

Suan Points 3768

La vraie réponse est que c'est impossible.

Cependant, grâce à @pithyless , et parce que j'utilisais déjà une fonction 'c' personnalisée pour changer de répertoire suivie d'un ls automatique, voici ce que je fais maintenant :

 # cd + ls, and change git email when in personal projects folder 
function c {
  if [[ "`abspath $1`" == *"$HOME/Projects"* ]]; then
    export GIT_AUTHOR_EMAIL="personal@gmail.com"
  else
    export GIT_AUTHOR_EMAIL="me@work.com"
  fi
  cd "${@:-$HOME}" && ls;
}

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