J'utilise mon ordinateur portable personnel pour mes projets professionnels et personnels et j'aimerais utiliser mon adresse électronique professionnelle pour mes commits au travail (gitolite) et mon adresse électronique personnelle pour les autres (github).
J'ai lu des articles sur les solutions suivantes, toutes globales ou temporaires:
git config --global user.email "[email protected]"
git config user.email "[email protected]"
git commit --author "Bob <[email protected]>"
GIT_AUTHOR_EMAIL
, GIT_COMMITTER_EMAIL
ou EMAIL
variables d’environnementUne solution consiste à exécuter manuellement une fonction Shell qui définit mon environnement sur travail ou personnel, mais je suis presque sûr que j'oublierai souvent de passer à l'identité correcte, ce qui entraîne commettre sous la mauvaise identité.
Existe-t-il un moyen de lier un référentiel, un nom de projet, etc. à une identité (nom, email)? Que font les gens?
git config user.email "[email protected]"
Faire cela dans un référentiel définira la configuration de ce référentiel, et non globalement.
On dirait que c'est à peu près ce que vous recherchez, à moins que je ne vous ai mal interprété.
Vous devez utiliser la commande local set ci-dessous:
ensemble local
git config user.email [email protected]
git config user.name 'Mahmoud Zalt'
local get
git config --get user.email
git config --get user.name
Le fichier de configuration local se trouve dans le répertoire du projet: .git/config
.
ensemble global
git config --global user.email [email protected]
git config --global user.name 'Mahmoud Zalt'
global get
git config --global --get user.email
git config --global --get user.name
Le fichier de configuration global dans votre répertoire personnel: ~/.gitconfig
.
N'oubliez pas de citer les blancs, etc., par exemple: 'Prénom Nom'
Editez le fichier de configuration avec dans le dossier ".git" pour conserver les différents nom d'utilisateur et email dépend du référentiel
[utilisateur]
nom = Bob
email = [email protected]
Cette commande ci-dessous vous indique le nom d'utilisateur et l'adresse de messagerie définis pour ce référentiel.
git config --get user.name
git config --get user.email
Exemple: pour le mien, ce fichier de configuration dans D:\workspace\Eclipse\ipchat\.git\config
Ici ipchat est mon nom de repo
Si vous utilisez git config user.email "[email protected]"
, Il sera lié au projet actuel dans lequel vous vous trouvez.
C'est ce que je fais pour mes projets. Je définis l'identité appropriée lorsque je clone/initie le référentiel. Ce n’est pas infaillible (si vous oubliez et appuyez avant de vous en rendre compte, mais vous êtes à bout de souffle) mais c’est aussi bon que vous pouvez obtenir sans pouvoir dire git config --global user.email 'ILLEGAL_VALUE'
En fait, vous pouvez créer une valeur illégale. Définissez votre git config --global user.name $(Perl -e 'print "x"x968;')
Ensuite, si vous oubliez de définir vos valeurs non globales, vous recevrez un message d'erreur.
[EDIT] Sur un système différent, je devais augmenter le nombre de x à 968 pour qu'il échoue avec "fatal: identificateur personnel incroyablement long". Même version de git. Étrange.
Si vous n'utilisez pas le --global
paramètre définira les variables pour le projet en cours uniquement.
Depuis Git 2.13, vous pouvez utiliser un includeIf
dans votre gitconfig pour inclure un fichier avec une configuration différente en fonction du chemin du référentiel où vous exécutez vos commandes git.
Depuis qu’une version assez récente de Git est fournie avec Ubuntu 18.04, je l’utilise dans mon ~/.gitconfig
très heureusement.
[include]
path = ~/.gitconfig.alias # I like to keep global aliases separate
path = ~/.gitconfig.defaultusername # can maybe leave values unset/empty to get warned if a below path didn't match
# If using multiple identities can use per path user/email
# The trailing / is VERY important, git won't apply the config to subdirectories without it
[includeIf "gitdir:~/projects/Azure/"]
path = ~/.gitconfig.Azure # user.name and user.email for Azure
[includeIf "gitdir:~/projects/gitlab/"]
path = ~/.gitconfig.gitlab # user.name and user.email for GitLab
[includeIf "gitdir:~/projects/foss/"]
path = ~/.gitconfig.github # user.name and user.email for GitHub
https://motowilliams.com/conditional-includes-for-git-config#disqus_thread
Pour utiliser Git 2.13, vous devez soit ajouter un PPA (Ubuntu antérieur à 18.04/Debian), soit télécharger les fichiers binaires et l’installer (Windows/autre Linux).
Une solution consiste à exécuter manuellement une fonction Shell qui définit mon environnement sur travail ou personnel, mais je suis presque sûr d'oublier d'oublier de passer à la bonne identité, ce qui entraînerait un engagement sous une mauvaise identité.
C'était exactement mon problème. J'ai écrit un script de hook qui vous avertit si vous avez une télécommande github et not défini un nom d'utilisateur local.
Voici comment vous le configurez:
Créer un répertoire pour contenir le hook global
mkdir -p ~/.git-templates/hooks
Dites à git de tout copier dans ~/.git-templates
à votre projet .git
répertoire lorsque vous exécutez git init ou clone
git config --global init.templatedir '~/.git-templates'
Et maintenant, copiez les lignes suivantes dans ~/.git-templates/hooks/pre-commit
et rendre le fichier exécutable (n'oubliez pas ceci sinon git ne l'exécutera pas!)
#!/bin/bash
RED='\033[0;31m' # red color
NC='\033[0m' # no color
GITHUB_REMOTE=$(git remote -v | grep github.com)
LOCAL_USERNAME=$(git config --local user.name)
if [ -n "$GITHUB_REMOTE" ] && [ -z "$LOCAL_USERNAME" ]; then
printf "\n${RED}ATTENTION: At least one Github remote repository is configured, but no local username. "
printf "Please define a local username that matches your Github account.${NC} [pre-commit hook]\n\n"
exit 1
fi
Si vous utilisez d'autres hôtes pour vos référentiels privés, vous devez remplacer github.com
selon vos besoins.
Maintenant, chaque fois que vous faites un git init
ou git clone
_ git copie ce script dans le référentiel et l’exécute avant toute validation. Si vous n'avez pas défini de nom d'utilisateur local, un avertissement sera émis et vous ne pourrez pas vous engager.