git pousse avec le mauvais utilisateur depuis le terminal


112

J'ai un problème avec git et mon terminal.

Voici une galerie pour vous montrer mon problème: http://imgur.com/a/6RrEY

Quand je pousse des commits depuis mon terminal, git dit que je les pousse avec un autre nom d'utilisateur, c'est un utilisateur de mon organisation (mon entreprise) sans aucun commit et il semble qu'il n'appartienne à personne: (vérifier la première photo de la galerie)

Mais cela ne se produit pas lorsque j'utilise Github pour mac, dans le flux, je vois les commits poussés par moi-même.

Le problème affecte également mes référentiels personnels, mon terminal dit que je n'ai pas l'autorisation de pousser des commits sur ces référentiels (ce qui est évidemment faux) car il essaie de le pousser avec cet utilisateur: (vérifier la deuxième photo de la galerie)

Devine quoi ? Cela ne se produit pas non plus avec Github pour mac.

J'ai changé mon ordinateur pour un tout nouveau il y a quelques jours, donc j'ai réinitialisé toute ma clé ssh de github et n'en ai laissé qu'une nouvelle générée par Github pour Mac, donc je ne pense pas qu'il y ait une clé utilisateur fantôme / ssh cachée quelque part, ce disque dur est tout neuf: (voir la troisième photo de la galerie)

Mon fichier .gitconfig est tout clair, il n'y a que mes informations d'identification: (vérifier la quatrième photo de la galerie)

Je ne comprends vraiment pas, aidez-moi, StackOverflow, vous êtes mon seul espoir.

(Mes excuses pour mes faibles compétences Gimp et la référence Star Wars)

ÉDITER : ssh-add -l ne montre que la bonne clé ssh créée par github pour mac et je n'ai qu'un seul compte github

EDIT2: ssh -T git@github.com reconnaissez-moi comme le bon utilisateur.

EDIT3: Après quelques tests, il semble que mon terminal fasse les commits avec mon nom d'utilisateur, mais les pousse avec l'autre, Github pour mac commits et pousse avec le bon nom d'utilisateur.Cette situation se produit avec chaque repo que j'ai / crée (même nouveau ceux).

EDIT4: Dans un référentiel personnel git log --pretty="%h %an %ae"montre mon bon nom d'utilisateur

EDIT5: Aucun signe de variables d'environnement qui remplaceraient mes informations d'identification dans mon env. Même si j'essaie de définir ces variables avec les bonnes informations d'identification, le problème persiste.

EDIT6: Les choses fonctionnent normalement si je force l'utilisateur sur le chemin /.git/configd'un référentiel mais je ne pense pas que ce soit la bonne option:http://USER@github.com/USER/REPO.git

EDIT7: Nous avons supprimé l'utilisateur git qui a poussé les commits pour moi et cela apporte une autre erreur:remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/USER/REPO.git/'

EDIT FINAL: J'ai installé git avec homebrew, tapé git config --global push.default simple et maintenant il prend mes informations d'identification même sans forcer l'utilisateur. C'est étrange. Merci à tous pour votre aide, vous êtes des gars formidables!


2
chèque ~/.gitconfiget $project_root/.git/configfichiers. L'un de ces deux est sûrement mal configuré pour le nom d'utilisateur.
mu 無

1
Merci pour votre réponse ansh0l. ~/.gitconfigest clair et est donc $project_root/.git/config. En fait, j'ai ce problème avec chaque projet personnel, les projets de travail peuvent être poussés puisque cet autre utilisateur appartient à mon organisation qui possède ces référentiels.
Yinfei

Avez-vous alors plusieurs comptes github? Un pour l'entreprise, l'autre pour un usage personnel?
mu 無

Non, un seul pour tout.
Yinfei

1
Une solution ennuyeuse serait de simplement régénérer une autre clé SSH. Si vous utilisez votre clé SSH actuelle avec un autre service, cela ne sert à rien.
Eduardo Bautista

Réponses:


168

J'ai juste eu ce problème au travail. Le git intégré qui est livré avec mac ou qui vient lorsque vous installez xcode met en cache les informations d'identification git dans le trousseau. La solution pour moi était de:

démarrer l'accès au trousseau (démarrer le projecteur via cmd + espace, tapez trousseau, appuyez sur Entrée)

Sous les porte-clés en haut à gauche, sélectionnez «connexion». Sous la catégorie à gauche, sélectionnez «mots de passe»

trouvez le nom "github" et supprimez-le.


2
Assurez-vous de supprimer toutes les entrées github ici et définissez la configuration de connexion * git config --global user.name <nom> * git config --global user.email <email>
Shank_Transformer

Dans mon cas, SourceTree rencontrait ce problème. La suppression de l'élément dans le trousseau l'a corrigé!
Shoerob

1
@Shank_Transformer votre solution a fonctionné pour moi! Je vous remercie!
Nazariy

Vous devrez peut-être rechercher (ou lancer directement) seahorsesur Ubuntu.
caw

3
Je suis
redevable

46

github vous identifie par la clé ssh qu'il voit, pas par un paramètre de git.

Par conséquent, vous devez vous assurer que la clé ssh de votre compte professionnel n'est pas dans votre trousseau de clés lorsque vous essayez de pousser à partir de votre compte personnel et vice versa.

Utilisez ssh-add -lpour déterminer quelles clés se trouvent dans votre trousseau de clés et ssh-add -d <keyfile>pour supprimer une clé de votre trousseau de clés, si cela ne fonctionne pas, supprimez la clé ssh «indésirable» ~/.ssh/config.

la source

NB: Github identifiera toujours votre commit en se basant uniquement sur l'e-mail.


5
C'est la seule réponse qui explique pourquoi il utilisait constamment le mauvais compte github malgré ma user.emailconfiguration correcte. J'aimerais pouvoir voter cinq fois.
Chris

1
dans mon cas, la suppression de la clé ssh a fonctionné comme un charmessh-add -D
rPawel

C'était la seule réponse qui a fonctionné pour moi. Merci!!
Edward Hartnett

La seule option qui a fonctionné. Cela n'a aucun sens que git ne choisisse pas la bonne clé. Puisque nous mentionnons le fichier ssh, il doit être utilisé dans config.
Revanth Kumar

Quand je le fais, ssh-add -lj'obtiens une réponse qui n'aide pas. Il tape, 4096 SHA256:lotsOfGibberish,about40chars (RSA)je ne sais pas comment nous utiliser ces informations.
MiguelMunoz

20

Malgré toutes les excellentes options offertes par les autres utilisateurs, le seul moyen de résoudre ce problème était de réinstaller complètement git et de taper git config --global push.default simplepour réécrire les bonnes informations d'identification.


@VonC, malgré votre réponse était excellente, cela n'a pas fonctionné du tout. C'est la seule solution qui a fonctionné pour moi. Je me demande si c'est un problème git ou OSX ...
swilgosz

40
git config --system --unset credential.helpera fonctionné pour moi, on me demande maintenant mes informations d'identification GitHub sur push et je peux fournir l'ID utilisateur et le mot de passe corrects.
CodeManX

@CoDEmanX your's était la seule réponse qui a fonctionné pour moi. Pour tous ceux qui rencontrent cela, c'est parce que nous utilisons 2FA au travail avec github et que je devais d'abord générer un jeton à partir de l'interface graphique github et l'utiliser comme mot de passe depuis la ligne de commande après avoir réinitialisé mes informations d'identification locales! consultez https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/ pour plus de détails
vancouver aura lieu

C'est juste le fichier .gitconfig. Supprimez-le ou réinitialisez-le ... J'ai rencontré ce problème lorsque j'ai soumis un projet d'essai pour une entrevue. Merde, ça fait mal cependant. C'est avec le fichier de configuration
Girish

git config --system --unset credential.helperne fonctionne pas sur Windows 10 git bash:error: could not lock config file C:/Program Files/Git/mingw64/etc/gitconfig: Permission denied
alex

17

J'utilise Windows 10 et j'ai rencontré le même problème aujourd'hui. Dans mon cas, mes informations d'identification pour différents utilisateurs ont été enregistrées par le gestionnaire d'informations d'identification Windows. Suppression / désactivation des informations d'identification git avec la commande ci-dessous, git config --global --unset credential.helper

n'a pas aidé. J'ai dû supprimer manuellement l'entrée dans Windows en suivant la méthode ci-dessous,

Démarrer -> Panneau de configuration ---> Comptes d'utilisateurs ---> Gérer vos informations d'identification ---> Informations d'identification Windows

Recherchez ensuite une entrée comme, git: https://github.com et supprimez-la. Cela fonctionne bien après cela.


Merci Gowtham
Balint

Merci, je n'ai jamais eu ce problème auparavant sous Windows mais aujourd'hui j'ai eu ce problème et je suis heureux de voir votre commentaire ici.
RaKoDev

Vous dites que "n'a pas aidé", mais s'il vous a donné le message qu'il ne pouvait pas verrouiller le fichier de configuration, le problème est simplement que vous devez l'exécuter à partir d'une invite de commande élevée, comme cela a été souligné dans un commentaire ci-dessus .
Stefan

15

il semble que mon terminal fasse les commits avec mon nom d'utilisateur, mais les pousse avec l'autre

Le nom et l'adresse e-mail de l'auteur et du commetteur (qui sont importants pour GitHub) sont dérivés de:

git config user.name
git config user.email

Cependant, comme mentionné dans git configet git commit-tree, ces valeurs peuvent être remplacées par des variables d'environnement:

GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL

Alors revérifiez ces variables.

Les choses fonctionnent normalement si je force l'utilisateur dans .git/configun référentiel mais je ne pense pas que ce soit la bonne option.

Mais cela devrait être une bonne solution.
Lorsque vous utilisez une URL https, je spécifie toujours l'utilisateur pour m'assurer que l'authentification est effectuée avec le bon utilisateur.

http://USER@github.com/USER/REPO.git

Merci pour votre réponse VonC! Malheureusement, mes git configinformations d'identification sont correctes et il n'y a aucune variable d'environnement définie dans mon /username/.bashrcfichier ...
Yinfei

@ Yinfei84 néanmoins, vérifiez votre ' env' sortie.
VonC

@ Yinfei84 que se passerait-il si (pour le tester) vous définissez ces variables explicitement, et essayez un commit et un push. Cela fonctionnerait-il mieux alors?
VonC

Je viens de le faire et le problème persiste.
Yinfei

2
Excusez-moi si je n'étais pas clair, je voulais dire que cela fonctionnait si je force l'utilisateur sur le chemin comme:http://USER@github.com/USER/REPO.git
Yinfei

9

Une solution temporaire est d'abord exécutée killall ssh-agentpuis ajoutez les clés ssh générées pour le compte que vous devez utiliserssh-add ~/.ssh/id_4shameer

Cela nous aidera à travailler sur plusieurs comptes github lorsque nous obtiendrons l'erreur de type ERROR: Permission to user/repo-git.git denied to username.


1
Je l'ai fait après avoir supprimé toute entrée Github du trousseau MacOS , et cela a parfaitement fonctionné. Deux points, après le killall, l' agent ssh doit être redémarré avec eval "$(ssh-agent -s)"et la ssh-addcommande doit être exécutée avec sudo.
arvymetal

7

Si vous utilisez MAC, accédez à Keychain Access et supprimez l'entrée de l'utilisateur pour lequel vous ne souhaitez pas accéder à git.


4

La solution pour moi était d'ajouter une entrée dans mon fichier ~ / .ssh / config pour github. J'ai dû faire ça parce que:

  1. J'avais plusieurs comptes github avec la même clé (ne faites pas ça!)
  2. lorsque vous 'git push' en utilisant ssh, votre ordinateur saisit id_rsa par défaut et l'utilise comme identité ssh.
  3. github ne peut pas (sans surprise) déconfliger le compte que vous voulez dire, car il base le compte sur la clé qui lui est présentée, qui, si elle est liée à plus d'un compte, entraîne une douleur comme celle-ci. Le tueur, c'est que pendant longtemps, je m'en sortais avec ça et les choses ont juste fonctionné.

L'entrée que j'ai ajoutée est:

Host github.com
    Hostname github.com
    Port 22
    User waterproofpatch
    IdentityFile ~/.ssh/id_rsa_waterproofpatch

J'avais créé une nouvelle clé, unique à mon compte, sous le nom id_rsa_waterproofpatch. Cette entrée dans ma configuration ssh spécifie que pour les connexions à github.com, je souhaite présenter cette clé.

Une autre solution aurait probablement été pour moi de me connecter à l'autre compte, de supprimer la clé ssh en double.


2

J'ai eu un problème similaire et il s'est avéré que le problème était le fait que le fichier de clé publique contenait mon adresse e-mail sur la dernière ligne. Cela semblait remplacer le paramètre Utilisateur dans ma configuration. Dès que j'ai supprimé mon e-mail du fichier .pub (et re-téléchargé dans mon dépôt), Git s'est connecté en utilisant le bon utilisateur.


Cela a fonctionné pour moi. Je ne sais pas pourquoi l'identifiant du fichier de clé publique était à l'origine au format «nom @ domaine», mais c'était le cas.
Brian Wagner

1

Ce qui a fonctionné pour moi était d'utiliser l' URL https du dépôt Github au lieu de l' URL ssh . Je suis allé sur la page du projet Github et j'ai copié l'URL https dans mon presse-papiers, puis je l'ai collée dans la deuxième commande ci-dessous:

git remote rm origin
git remote add origin https://[...]

1

Quelle douleur dans le cul!

problème:

  1. créer un dépôt sur git hub
  2. cloner sur la machine locale
  3. ne peut pas pousser 403.

tourne pour une raison inconnue git push utilisait le mauvais utilisateur. J'ai quelques identifiants d'utilisateur git hub différents. Je travaille pour 2 entreprises différentes et j'ai également une carte d'étudiant

Je travaille sur un mac. voici ce que j'ai finalement fait

1) Retirez les informations d'identification.

  • comment l'assistant d'identification a été défini sur osxkeychain
  • quand j'ai commencé le trousseau, cliquez sur connexion, mots de passe et recherché github, j'ai trouvé 3 entrées. Je n'ai aucune idée de la façon dont le trousseau pourrait savoir lequel utiliser

une. vous devez déterminer où le credential.helper est configuré

git config --local credential.helper
git config --global credential.helper
git config --system credential.helper

b. une fois trouver le fichier fig correct, retirez-le comme suit

git config --global --unset credential.helper

Maintenant, dans mon dépôt local, j'ai piraté le fichier .git / config

j'ai changé

    url = https://github.com/aedavids/lab3RotationProject.git

à

    url = https://myGitHubUserId@github.com/aedavids/lab3RotationProject.git

1

Dans mon cas particulier, le problème était que j'utilisais un .netrcpour accéder github.comet qu'il était configuré avec un jeton d'un autre utilisateur:

machine github.com login <another-user-token>

0

effacer le trousseau n'a pas aidé ... J'ai dû ssh-add -Det rajouter la clé avecssh-add <keyfile>


0

J'ai résolu ce problème en supprimant (ou en renommant * .bak) les fichiers id_rsa et id_rsa.pub sur MacOS High Sierra. Idée d' ici .

J'ai des redirections d'hôte personnalisées dans ~ / .ssh / config qui devraient être appliquées mais utilisées par un mauvais utilisateur avant de renommer les deux fichiers ...


0

C'est ce qui a fonctionné pour moi:

  1. Modification des informations d'identification dans .git-credentials
  2. Modification du global user.name et user.email dans .gitconfig

0

Ce qui a fonctionné pour moi en supprimant le dépôt et en l'ajoutant à nouveau:

git remote rm origin
git remote add origin git@github.com:fguillen/MyApp.git

0

J'ai le même problème dans Windows10 même après avoir désinstallé mon git, comme @ user542833 le dit, c'est parce que le cache Windows et que vous devez supprimer les informations d'identification Github dans vos fenêtres Credential Manageret lorsque vous essayez à nouveau de pousser, Windows vous demande vos informations d'identification et le redéfinit


cela fonctionnait parfois pour moi, mais aussi parfois non.
bvdb

0

Je viens de passer 6 heures à comprendre cela en essayant de pousser vers un nouveau repo de pages GitHub sur un nouveau compte.

Même après avoir défini la configuration user.name et user.email, il serait par défaut mon compte principal.

C'est parce que la clé ssh sera par défaut id_rsa (mon compte principal).

Pour utiliser le nouveau compte, je devais exécuter:

ssh-add ~/.ssh/my_new_key

ce qui obligera git à utiliser la nouvelle clé en appuyant sur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.