Comment puis-je pousser vers GitHub sous un nom d'utilisateur différent?

158

Un ami et moi partageons mon ordinateur. J'ai fait des push sur GitHub en utilisant le shell git bash sur Windows 7. Nous sommes maintenant dans un projet différent sur cet ordinateur et j'ai besoin qu'elle pousse sur son compte. Mais il continue d'essayer d'utiliser mon nom d'utilisateur et de dire que je n'ai pas accès à son référentiel:

$ git push her_github_repository our_branch
ERROR: Permission to her_username/repository.git denied to my_username.
fatal: The remote end hung up unexpectedly
à.
la source
Est-ce que cela aide.github.com/articles/setting-your-email-in-git (utiliser git config --global user.name her_username) avant de pousser
Prinzhorn
Je vois que vous êtes passé aux URL HTTPS, donc github demande toujours les informations d'identification. Rappelez-vous simplement que les validations seront toujours enregistrées comme effectuées par l'utilisateur dans git config user.name et git config user.email indépendamment de qui effectue réellement le push. ps Je ne pense pas qu'il y ait une histoire de qui a poussé quoi.
Jorge Orpinel
29
git config --local credential.helper ""peut faire l'affaire.
SOFe
Je n'ai pu suivre aucune des solutions données ici sur mon système Windows. Les étapes données dans cette réponse ont finalement fonctionné stackoverflow.com/a/15382950/351903
Sandeepan Nath
@SOFe c'est ce que je cherchais! Cette commande efface-t-elle efficacement certaines informations d'identification mises en cache?
CCJ

Réponses:

94

Si vous utilisez un utilisateur Windows différent, votre clé SSH et vos paramètres git seront indépendants.

Si ce n'est pas une option pour vous, votre ami doit ajouter votre clé SSH à son compte Github.

Bien que la solution précédente vous incitera à pousser comme vous-même, mais elle vous permettra de pousser dans son repo. Si vous ne le souhaitez pas et travaillez dans un dossier différent sur le même PC, vous pouvez configurer le nom d'utilisateur et l'e-mail localement dans un dossier avec git en supprimant l' -gindicateur de la commande config:

git config user.name her_username
git config user.email her_email

Sinon, si vous passez au httpsprotocole, Github vous demandera à chaque fois un nom d'utilisateur / mot de passe (sauf si vous utilisez un gestionnaire de mots de passe).

Simon Boudrias
la source
6
Autant que je me souvienne, les clés SSH doivent être uniques sur Github, vous ne pouvez pas avoir la même clé attachée à plusieurs comptes
Gareth
@Gareth Peut-être, mais vous pouvez définir plusieurs clés SSH pour le même utilisateur dans Windows (et partout où je sais).
Simon Boudrias
ne peut pas avoir deux clés, voir ma réponse ci-dessous.
chovy
1
Pour tous les projets:git config --global user.name "Mona Lisa"
w3spi
239

Cela a fonctionné pour moi, il vous demandera le nom d'utilisateur et le mot de passe

git config --local credential.helper ""
git push origin master
locotracteur
la source
1
Merci, cela a fonctionné pour moi, j'ai utilisé bitbucket et j'ai configuré mon nom d'utilisateur, mais cela a résolu la migration vers aws code-commit
Alejandro Ruiz
J'avais helper = cache --timeout=999999mis sur mon .gitignoreet cela a fonctionné. Mais un moyen de réinitialiser cela sans changer une configuration locale, je me demande?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Ceci est incroyable!
hargun3045
C'est ce que je cherchais!!!
aagjalpankaj le
1
Mieux vaut expliquer ce qu'il fait ici: il configure votre dépôt local pour ignorer le (probablement globalement) configuré credential.helper, par exemple le magasin d'informations d'identification Windows. Cela signifie également qu'il demande un nom d'utilisateur / mot de passe chaque fois qu'il en a besoin, car rien n'est configuré, alors peut-être que vous pouvez également configurer le credential.helperpour mettre en cache à la place (voir la réponse de @Ciro Santilli) ou utiliser une réponse différente ici.
rugk
53

Vous pouvez pousser avec en utilisant un compte différent. Par exemple, si votre compte est A qui est stocké dans .gitconfig et que vous souhaitez utiliser le compte B qui est le propriétaire du repo que vous souhaitez pousser.

Compte B : B_user_name, B_password
Exemple de lien SSH: https://github.com/B_user_name/project.git

Le compte push avec B est:

$ git push https://'B_user_name':'B_password'@github.com/B_user_name/project.git

Pour voir le compte dans .gitconfig

  1. $git config --global --list
  2. $git config --global -e (pour changer de compte aussi)
Thotruong
la source
Wow c'est la réponse !! J'ai mis user.name, user.emaildans la configuration locale, j'ai cloné avec le nom d'utilisateur, et ne fonctionne pas; maintenant, la dernière réponse fonctionne sans toucher le trousseau / quoi que ce soit ... dans Git 2.9.0 in Windows. "enfin mais non des moindres" .. c'est comme ça qu'on l'appelle. Je vous remercie. Cette réponse mérite plus de votes positifs.
WesternGun
3
Le seul effet secondaire, c'est que votre mot de passe / nom d'utilisateur est enregistré dans l'historique bash .. Mais cela fonctionne pour moi.
WesternGun
Merci pour cela, c'est exactement ce que je voulais faire. Cela pousse à maîtriser, cependant. Comment pourrais-je pousser vers une branche en plus du maître?
Steven Anderson
2
@WesternGun Ne fournissez pas de mot de passe dans l'URL si vous voulez l'empêcher d'être enregistré dans l'historique bash. Utilisez https://'B_user_name'@github.com/B_user_name/project.git. Cela devrait demander le mot de passe de B_user_name.
subtleseeker
24

J'ai configuré un alias ssh en utilisant un personnalisé IdentityFileet réécrit l'origine pour utiliser mon me-githubnom d'hôte personnalisé .

#when prompted enter `id_rsa_user1` as filename
ssh-keygen -t rsa

# ~/.ssh/config
Host user1-github
HostName github.com
Port 22
User git
IdentityFile ~/.ssh/id_rsa_user1

#check original remote origin url
git remote -v
origin [email protected]:user1/my-repo.git

#change it to use your custom `user1-github` hostname
git remote rm origin
git remote add origin git@user1-github:user1/my-repo.git
chovy
la source
5
Au lieu de supprimer puis d'ajouter, nous pouvons changer l'url distante par: git remote set-url origin git@user1-github:user1/my-repo.git 😊
Ninh Pham
18

Si vous utilisez une URL SSH ( [email protected]:username/projectname.git) plutôt qu'une URL HTTPS, vous pouvez temporairement spécifier une clé SSH différente à l'aide de la $GIT_SSH_COMMANDvariable d'environnement:

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

Pour autant que je sache, avec les URL SSH, GitHub ne se soucie pas des noms d'utilisateurs, uniquement des clés: si un compte utilisateur a accès à un référentiel et que ce compte a une clé SSH (voir la page des clés SSH dans le compte settings), alors si vous utilisez cette clé SSH pour pousser vers ce référentiel, le push sera traité comme venant de cet utilisateur.

David Moles
la source
1
cela n'a pas fonctionné pour moi, fait intéressant, changer le user.nameet user.emaildans git configchangera le compte auquel un commit est lié
Kevin Zhao
Cela a fonctionné pour moi. Juste un petit commentaire pour clarifier la réponse. "different_private_key" est un fichier sur l'hôteA qui contient la clé privée de l'utilisateurB au nom duquel nous voulons effectuer "git push" sur l'hôteA étant l'utilisateurA. Vous devez créer ce fichier sur l'hôteA (par exemple, comme ~ / .ssh / id_rsa_userB) et y placer le contenu du fichier ~ / .ssh / id_rsa de l'hôteB où l'utilisateurB existe. Peu importe si l'utilisateurB existe ou n'existe pas sur l'hôteA.
Alexander Samoylov
15

Si après l'exécution de git pushGit demande un mot de passe de user, mais que vous souhaitez pousser comme new_user, vous pouvez utiliser git config remote.origin.url:

$ git push
[email protected]:either/branch/or/path's password:

À ce stade, utilisez ^Cpour quitter git pushet utilisez le suivant pour pousser comme new_user.

$ git config remote.origin.url
[email protected]:either/branch/or/path

$ git config remote.origin.url [email protected]:either/branch/or/path

$ git push
[email protected]:either/branch/or/path's password:
Lukasz Czerwinski
la source
Bonjour, j'ai essayé cette solution pour pousser vers atlassian stash. J'obtiens l'erreur "<URL> / info / refs not found: avez-vous exécuté git update-server-info sur le serveur?" Je ne pense pas pouvoir exécuter des commandes sur Stash. Avez-vous une idée pour résoudre ce problème? Merci!
Zsolt Szilagyi
Pour GitHub, cela ressemblerait à:git config remote.origin.url https://[email protected]/different_user/repo.git
NumesSanguis
13

C'est simple lors du clonage, veuillez prendre l'URL git avec votre nom d'utilisateur.

Par exemple:

git clone https: //[email protected]/username/reponame.git

git clone https: //[email protected]/username/reponame.git

Krishnamoorthy Acharya
la source
4
Cette réponse devrait avoir au moins plus de votes positifs. Si vous ne faites pas comme @Krishna Kavoor dit, vous aurez toujours le problème, car bien que globalement vous ayez username1 et localement vous avez username2, git essaiera d'utiliser le nom global.
Markon
Ça ne marche pas. Je l' ai utilisé et dire: fatal: repo not found.
WesternGun
1
Cela fonctionne toujours Depuis que j'ai 3 projets différents de 3 clients différents.Cela fonctionne comme un miracle.Veuillez vérifier que le chemin de votre dépôt est correct.
Krishnamoorthy Acharya
8

si c'est ton problème

remote: Permission to username1/repo.git denied to username2.
fatal: unable to access 'https://github.com/username1/repo.git/':
The requested URL returned error: 403

En plus de changer le nom d'utilisateur et l'e-mail du terminal à l'aide de git config:

$ git config --global user.name "Bob"
$ git config --global user.email "[email protected]"

vous devrez supprimer les informations d'autorisation du trousseau. Cette solution m'a pris plusieurs heures à comprendre, j'ai découvert que j'avais également un certificat dans mon trousseau.

Ouvrez l'accès au trousseau, cliquez sur Tous les éléments et recherchez git. Supprimer tout le trousseau

Muyide Ibukun
la source
Quel est l'homologue Windows 7 du trousseau?
Thomas Eyde
Pas sûr, mais je le découvrirai
Muyide Ibukun
Je suppose que je suis coincé ici aussi. Avez-vous découvert?
Sandeepan Nath
Non, je n'ai pas finalement découvert, mais je suppose que cela ne devrait pas être si difficile
Muyide Ibukun
1
merci pour la suggestion de supprimer les informations d'autorisation du trousseau
Luja Shrestha
7

J'utilise une machine pour pousser le code vers deux comptes GitHub différents avec un nom d'utilisateur différent. En supposant que vous ayez déjà configuré un compte et que vous souhaitiez en ajouter un nouveau:

  1. Générer une nouvelle clé SSH ssh-keygen -t rsa -C "[email protected]"
  2. Enregistrez-le, mais n'oubliez pas de ne pas remplacer celui existant id_rsa. Donnez-lui un nom différent, par exempleid_rsa_another
  3. Copiez le contenu de la clé dans votre compte GitHub:

Paramètres -> Clés SSH et GPG -> Nouvelle clé SSH -> Donnez une étiquette et collez la clé -> Ajouter une clé SSH

  1. Ajoutez la clé à l'agent ssh: ssh-add ~/.ssh/id_rsa_another
  2. Configurer un hôte GitHub: créez un fichier de configuration avec touch ~/.ssh/configet modifiez le fichier en fournissant des configurations à vos comptes:
#first account
Host github.com-first
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa

#another account
Host github.com-another
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_another

Maintenant, vous devriez pouvoir pousser à partir de différents comptes en fonction de la clé que vous ajoutez à l'agent ssh, c'est-à-dire pour utiliser votre premier compte, faites ssh-add ~/.ssh/id_rsa .

Vous pouvez également modifier votre adresse e-mail utilisateur:

git config --global user.email "[email protected]"

ou nettoyez les clés ssh en cas d'erreur d'autorisation lors de la pusation du code sur l'un des comptes:

ssh-add -D

Tomasz Bartkowiak
la source
1
Oui, j'ai déjà défini plusieurs comptes. Mais comment puis-je pousser avec le premier compte. Pouvez-vous s'il vous plaît partager la commande?
codemicky le
Qu'entendez-vous par «comment puis-je pousser»? Ça git pushne marche pas? Vous devriez pouvoir appuyer après avoir ajouté votre clé
Tomasz Bartkowiak
Vous devez définir l'utilisateur pour chaque projet de dépôt $ git config user.email
jasmintmp
6

Accédez à Credential Manager Accédez aux informations d'identification Windows Supprimez les entrées sous Informations d'identification génériques Essayez de vous reconnecter.

Deepak
la source
Merci. Le chemin est Control Panel\All Control Panel Items\Credential Manager-> Windows Credentials.
Saheed
4

Comme mentionné précédemment, vous pouvez utiliser

git config user.name her_username
git config user.email her_email

pour définir manuellement le nom d'utilisateur et l'adresse e-mail pour un dépôt unique, mais vous devez ajouter cette commande:

git commit --amend --reset-author

si vous avez déjà essayé de pousser avant le changement. Sinon, les modifications n'apparaissent pas dans le fichier de configuration.

Martin819
la source
Ce n'est pas vrai. Le --reset-author(avec --...) mettra le dernier nom / e-mail configuré sur le dernier commit, ainsi que le dernier horodatage. Cela n'affecte pas les changements dans le fichier de configuration.
Ramon Snir
3

Vous pouvez ajouter une nouvelle URL distante pour l'autre nom d'utilisateur en utilisant git remote add origin-username https://[email protected]/repository_name.git

Après cela, si vous poussez en utilisant git push -u origin-username master, cela vous demandera le mot de passe.

Raman Singh
la source
2

git config user.name ne change que le nom que je valide. Je ne peux toujours pas pousser. C'est ainsi que j'ai résolu le problème et je pense que c'est un moyen facile pour moi.

  1. Générez une clé SSH sous le nom d'utilisateur que vous souhaitez pousser sur l'ordinateur que vous utiliserez https://help.github.com/articles/connecting-to-github-with-ssh/

  2. Ajoutez cette clé au compte d'utilisateur github que vous souhaitez pousser vers https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

  3. Choisissez de cloner avec SSH

Vous pouvez maintenant envoyer cet utilisateur à ce dépôt.

Yang Fang
la source
2

Si sous Windows et l'utilisateur Git pour Windows et managerpour la gestion des informations d'identification (aka Git-Credential-Manager-for-Windows Link ), le problème est qu'il n'y a pas de moyen facile de basculer entre les utilisateurs lors du transfert vers GitHub en httpsutilisantOAuth jetons.

La raison en est que le jeton est stocké sous la forme:

  • Adresse Internet: git:https://github.com
  • Nom d'utilisateur: Personal Access Token
  • Mot de passe: OAuth_Token

Les variations de l'URL dans Internet Addressne fonctionnent pas, par exemple:

La solution: les espaces de noms . Cela se trouve dans les détails de la configuration du Git-Credential-Manager-for-Windows:

En citant:

espace de noms

Définit l'espace de noms pour les informations d'identification stockées.

Par défaut, le GCM utilise l'espace de noms 'git' pour toutes les informations d'identification stockées, la définition de cette valeur de configuration permet de contrôler l'espace de noms utilisé globalement ou par hôte.

git config --global credential.namespace name

Maintenant, stockez vos informations d'identification dans le Gestionnaire d'informations d'identification Windows comme:

  • Adresse Internet: git.username:https://github.com
  • Nom d'utilisateur: Personal Access Token
  • Mot de passe: OAuth_Token

Notez que nous avons changé: git-> git.username(où vous changezusername votre nom d'utilisateur réel ou pour le plaisir, en ce que vous voudrez peut-être comme identifiant unique)

Maintenant, dans le référentiel où vous souhaitez utiliser l'entrée spécifique, exécutez:

git config credential.namespace git.username

(Encore une fois ... remplacez-le usernamepar la valeur souhaitée)

Votre .git/configcontiendra maintenant:

[credential]
    namespace = git.username

Et voilà! Les bonnes informations d'identification seront extraites du magasin d'informations d'identification Windows.

Ceci, bien sûr, ne change pas quel utilisateur / e-mail envoie. Pour cela , vous devez configurer l'habituel user.nameetuser.email

souvenir
la source
Je vous remercie. Cela a fonctionné le mieux pour moi (Windows 10). Pas de suppression temporaire des autres comptes utilisateurs git dans les identifiants Windows, pas de "hacks". J'ai un utilisateur git global / hôte pour tous les référentiels. Sauf qu'un seul d'entre eux nécessite des informations d'identification différentes. Si cela convient également à votre environnement, laissez tout tel quel dans les informations d'identification Windows, accédez à votre référentiel "spécial" et tapez git config credential.namespace git.usernamecomme mentionné (en remplaçant le nom d'utilisateur). Si vous appuyez la prochaine fois, git vous demandera les nouvelles informations d'identification pour le nom d'utilisateur.
ford04
2

Je ne pouvais pas comprendre comment avoir une deuxième identité github sur une seule machine (aucune de ces réponses ne fonctionnait pour moi pour cela), mais j'ai compris comment être capable de pousser vers plusieurs comptes github différents comme moi-même.

Pousser avec le même nom d'utilisateur, mais vers différents comptes github

  1. Configurez une deuxième clé SSH ( comme ça ) pour votre deuxième compte github

  2. Changez de compte ainsi:

Push avec mon nouveau deuxième compte github

ssh-add -D
ssh-add ~/.ssh/ssh_key_for_my_2nd_account
git push

Push avec mon compte principal

ssh-add -D
ssh-add ~/.ssh/id_rsa   
git push
kris
la source
1

Si vous avez https://desktop.github.com/,
vous pouvez aller dans Préférences (ou Options) -> Comptes
, puis vous déconnecter et vous connecter.

Honnête Abe
la source
Il n'y a pas de menu Préférences?
Thomas Eyde
@ThomasEyde Il existe sur macOS. C'est "Options" sur Windows.
Honest Abe
1

Suivez les étapes suivantes:

  1. Vous devez comprendre cela, vous définissez l'auteur avant de vous engager! les commits sont déjà gelés: ils portent le nom donné à leur auteur et à leur committer, et ceux-ci ne peuvent pas être modifiés.
# you can check what's currently:
git config user.name
git config user.email

git config user.name "your_github_username"
git config user.email "your_github_email"

# Again check what's currently:
git config user.name
git config user.email
  1. Vérifiez à qui votre commit est tagué?
git log
# once you're confirmed that it's tagged to you, then you should move to step 3

Si l'auteur se trompe, vous pouvez facilement annuler le dernier commit sans perdre les modifications

De plus, avant de passer à l'étape 3, n'oubliez pas de suivre la première étape pour vérifier la cohérence.

  1. donnez-vous une invite pour entrer github_username et github_password
git config --local credential.helper ""
git push
# it will ask you to enter your github_username and github_password
aakriti
la source
0

L'ID utilisateur où la validation se produit est stocké dans le fichier de configuration.

aller en haut du référentiel vi .git / config

modifier la ligne d'url indiquée après "[remote" origin "] pour avoir l'ID utilisateur approprié

wainCam
la source
0

Si vous utilisez ssh et obtenez

Autorisation à some_username / repository.git refusée à Alice_username

alors que vous ne voulez pas pousser comme Alice_username, assurez-vous qu'Alice_username n'a pas la clé ssh de votre ordinateur ajoutée à son compte github.

J'ai supprimé ma clé ssh du compte github d'Alice et le push a fonctionné.

Achraf Amil
la source