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 [email protected] 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://[email protected]/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!

Yinfei
la source
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.

user542833
la source
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.

Nithin
la source
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.

Yinfei
la source
@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.

Gowtham
la source
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://[email protected]/USER/REPO.git
VonC
la source
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://[email protected]/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.

Mshameer
la source
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.

Chitrapal Singh
la source
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.

imperméable à l'eau
la source
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.

Mike
la source
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://[...]
Keith Bennett
la source
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://[email protected]/aedavids/lab3RotationProject.git
AEDWIP
la source
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>
Travis Clarke
la source
0

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

Victor Pudeyev
la source
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 ...

Codage de votre vie
la source
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
remodeler
la source
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 [email protected]:fguillen/MyApp.git
fguillen
la source
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

ghazaleh javaheri
la source
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.

jmoz
la source