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.
Réponses
Trop de publicités?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
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
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"
}
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;
}