565 votes

Multiples comptes GitHub sur le même ordinateur?

Essayer de travailler à la fois sur mes dépôts de travail réels et mes dépôts sur GitHub, depuis mon ordinateur.

Le compte de travail a été créé en premier, et tout fonctionne parfaitement.

Cependant, mon compte ne semble pas pouvoir pousser vers mon dépôt, qui est configuré sous un compte/adresse e-mail différent.

J'ai essayé de copier ma clé de travail vers mon compte, mais cela génère une erreur car bien sûr une clé ne peut être attachée qu'à un seul compte.

Comment puis-je pousser/tirer de et vers les deux comptes avec leurs identifiants GitHub respectifs?

4 votes

Les étapes données dans le lien http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work‌​-with-github-and-mul‌​tiple-accounts ont bien fonctionné pour moi et juste pour ajouter une chose, vous devez ajouter votre clé de dépôt personnel en utilisant
  ssh-add ~/.ssh/id_rsa_COMPANY
pour indiquer à l'agent ssh de l'inclure pour une utilisation.

Le reste fonctionne bien pour moi avec le tutoriel mentionné ci-dessus.

2 votes

"parce qu'une clé ne peut être attachée qu'à un seul compte" bien sûr ? pourquoi ?

0 votes

À partir de Git 2.13, il prend en charge les inclusions conditionnelles dans .gitconfig qui est une façon utile de gérer les identités par hiérarchie de dossiers. stackoverflow.com/a/36296990/901597

390voto

Pavan Points 6577

Tout ce que vous avez à faire est de configurer votre installation SSH avec plusieurs paires de clés SSH.

Étapes pertinentes du premier lien :

  1. Générer une clé SSH :

    ssh-keygen -t ed25519 -C "john@doe.example.com"

    Suivez les invites et décidez d'un nom, par exemple id_ed25519_example_company.

  2. Copier la clé publique SSH vers GitHub depuis ~/.ssh/id_ed25519_doe_company.pub et informer ssh à propos de la clé :

    ssh-add ~/.ssh/id_ed25519_doe_company
  3. Créer un fichier config dans ~/.ssh avec le contenu suivant :

    Host github-doe-company
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_ed25519_doe_company
  4. Ajouter votre distant :

    git remote add origin git@github-doe-company:username/repo.git

    ou changer en utilisant :

    git remote set-url origin git@github-doe-company:username/repo.git

Aussi, si vous travaillez avec plusieurs dépôts en utilisant différentes personas, vous devez vous assurer que les paramètres utilisateur de vos dépôts individuels sont correctement remplacés :

Définition du nom d'utilisateur, de l'e-mail et du jeton GitHub - Remplacer les paramètres pour les dépôts individuels https://help.github.com/articles/setting-your-commit-email-address-in-git/

Remarque : Certains d'entre vous peuvent nécessiter l'utilisation de différents e-mails pour différents dépôts, à partir de git 2.13, vous pouvez définir l'e-mail sur une base de répertoire en éditant le fichier de configuration globale trouvé à : ~/.gitconfig en utilisant des conditionnels comme ceci :

[user]
    name = Nom par défaut
    email = emaiulpardefaut@example.com

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

Et ensuite votre configuration spécifique à votre travail ~/work/.gitconfig ressemblerait à ceci :

[user]
    name = Pavan Kataria
    email = pavan.kataria@example.com

Merci @alexg de m'avoir informé de ceci dans les commentaires.

4 votes

Le 3ème lien est maintenant cassé (Clés SSH multiples)

13 votes

Le premier lien redirige maintenant vers une page sur les comptes utilisateur vs organisationnels (pas sûr que ce soit ce qui était initialement prévu). Ce tutoriel était facile à suivre et a résolu mes problèmes.

0 votes

Si vous pouvez mettre à jour la réponse pour inclure votre lien utile à la place du lien cassé, ce serait utile et je vous en serais reconnaissant. Merci Eric.

26voto

mishaba Points 121

En créant différents alias d'hôte pour github.com dans votre fichier ~/.ssh/config, et en attribuant à chaque alias d'hôte sa propre clé ssh, vous pouvez facilement utiliser plusieurs comptes github sans confusion. C'est parce que github.com ne fait pas de distinction par l'utilisateur, qui est toujours juste git, mais par la clé ssh que vous avez utilisée pour vous connecter. Configurez simplement vos origines distantes en utilisant vos propres alias d'hôte.

Le résumé ci-dessus est fourni par des commentaires sur l'article de blog ci-dessous.

J'ai trouvé cette explication la plus claire. Et ça marche pour moi, du moins jusqu'en avril 2012.

http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/

1 votes

Vous devrez probablement exécuter $ ssh-add ~/.ssh/id_rsa_COMPANY - voir Erreur : Permission refusée (clé publique) - Documentation utilisateur

25voto

Matthew Skelton Points 934

Les détails sur http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/ liés par mishaba fonctionnent très bien pour moi.

A partir de cette page:

$ touch ~/.ssh/config

Ensuite, éditez ce fichier pour ressembler à ceci (une entrée par compte):

#Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

Host github-COMPANY
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_COMPANY

9 votes

Je noterais également que soit "github.com" soit "github-COMPANY" devrait être utilisé lors d'un clone (et probablement d'autres commandes) comme git clone git@github-COMPANY/repo/name.git pour obtenir la clé SSH correcte.

0 votes

@dtan: Comment pourrais-je implémenter ceci si je devais le cloner via https ? git clone https://github-COMPANY/GitUserName/projectname.git ne semble pas fonctionner. La clé par défaut utilisant github.com fonctionne parfaitement.

1 votes

@IsaacRemuant, devez-vous absolument passer par https? Chaque fois que vous voulez tirer/pousser, vous devez entrer vos identifiants d'utilisateur. Il serait préférable de pouvoir faire git://github-COMPANY...projectname.git. Y a-t-il un message d'erreur pour l'appel https?

11voto

David H Points 23654

J'utilise des scripts shell pour me basculer vers n'importe quel compte que je veux être "actif". Fondamentalement, vous commencez à partir d'un nouveau départ, configurez un compte correctement et travaillez, puis déplacez ces fichiers vers un nom avec le préfixe approprié. À partir de là, vous pouvez utiliser la commande "github" ou "gitxyz" pour basculer :

# mon script github
cd ~/.ssh

if [ -f git_dhoerl -a -f git_dhoerl.pub -a -f config_dhoerl ]
then
    ; 
else 
    echo "Erreur : fichiers manquants"
    exit 1
fi 

# Enregistrer une copie dans /tmp, au cas où
cp id_rsa /tmp
cp id_rsa.pub /tmp
cp config /tmp
echo "Fichiers anciens enregistrés dans /tmp, au cas où"

rm id_rsa
rm id_rsa.pub
rm config
echo "Liens/fichiers actuels supprimés"

ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config

git config --global user.email "dhoerl@.com"
git config --global github.user "dhoerl"        
git config --global github.token "whatever_it_is"

ssh-add -D

J'ai eu beaucoup de chance avec ça. J'ai également créé un script de lancement dans Xcode (pour les utilisateurs de Mac) afin qu'il ne compile pas mon projet à moins que je n'aie le réglage approprié (puisque ça utilise git) :

Script de lancement placé après les Dépendances (en utilisant /bin/ksh comme shell) :

if [ "$(git config --global --get user.email)" != "dhoerl@.com" ]
then
    exit 1
fi

ÉDIT : ajout des tests pour vérifier l'existence des nouveaux fichiers et copier les anciens fichiers dans /tmp pour répondre au commentaire de @naomik ci-dessous.

0 votes

Soyez prudent lorsque vous postez des réponses boilerplate/verbatim copiées-collées à plusieurs questions, celles-ci sont généralement signalées comme "spam" par la communauté. Si vous le faites, cela signifie généralement que les questions sont des doublons, signalez-les comme tels à la place : stackoverflow.com/questions/7548158, stackoverflow.com/questions/3225862, stackoverflow.com/questions/7924937

1 votes

C'est un cauchemar. Si quelqu'un devait exécuter ce script avant de comprendre que leurs clés id_rsa et id_rsa.pub seraient supprimées, ils pourraient se retrouver bloqués à distance.

0 votes

@naomik a mis à jour le script pour d'abord vérifier les nouveaux fichiers, et pour enregistrer les anciens fichiers dans /tmp

4voto

Brut3e Points 191

Les étapes mentionnées dans le lien http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts ont bien fonctionné pour moi et juste pour ajouter une chose, vous devez également ajouter votre clé personnelle de dépôt en utilisant
  ssh-add ~/.ssh/id_rsa_COMPANY
pour dire à l'agent SSH de l'inclure pour une utilisation.


Le reste fonctionne bien pour moi avec le tutoriel mentionné ci-dessus.

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