web-dev-qa-db-fra.com

Comment dire à git d'utiliser la bonne identité (nom et email) pour un projet donné?

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:

Une 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?

108
Martin Jambon

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

124
Dan Ray

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'

35
Mahmoud Zalt

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

  • Accédez à votre référentiel
  • Afficher les fichiers cachés et aller dans le dossier ".git"
  • Trouver le fichier "config"
  • Ajouter les lignes ci-dessous à EOF

[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

22
arulraj.net

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.

16
Seth Robertson

Si vous n'utilisez pas le --global paramètre définira les variables pour le projet en cours uniquement.

7
ismail

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

3
dragon788

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:

  1. Créer un répertoire pour contenir le hook global

    mkdir -p ~/.git-templates/hooks

  2. 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'

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

0
naitsirch