Git pusht als falscher Benutzer in das entfernte GitHub-Repository

81

Ich habe einen geschäftlichen GitHub-Account und einen persönlichen. Zuerst habe ich das persönliche für Testprojekte verwendet, dann bin ich weitergegangen und habe ein Repository mit dem anderen Konto auf demselben Computer erstellt.

Jetzt wollte ich wieder ein neues Repository in meinem persönlichen Konto erstellen, habe das globale und das lokale geändert user.nameund ein neues SSH-Schlüsselpaar erstellt, das auf der GitHub-Setup-Seite eingegeben wurde. Dann habe ich das Verzeichnis eingerichtet

git init
git remote add origin <url>
git push origin

aber das sagt mir jetzt

FEHLER: Erlaubnis an personaluser / newrepo.git verweigert

Ich habe keine Ahnung, wie das andere Konto mit diesem verbunden ist. .git/configzeigt keine workusernameverwandten Dinge.

Wenn Sie Windows 10 verwenden, nehmen Sie sich Zeit, um die Antwort des Rajan zu lesen.

Raz Faz
quelle
1
Antworten Sie für Windows 10 unten. Entfernen Sie die Anmeldeinformationen aus dem Anmeldeinformations-Manager. 2 Stunden Zeit verschwendet.
Xenteros
@xenteros Bitte poste dies als Antwort. Ich habe 1 Stunde verloren und du hast mir noch 1 Stunde gespart.
Lexicore

Antworten:

75

Das klingt sehr ähnlich zu meiner aktuellen Arbeit. Es scheint, dass Sie bereits eine separate Datei eingerichtet haben. Daher müssen ssh-keysSie auch eine ~/.ssh/configDatei erstellen und diese mit ähnlichen Informationen füllen:

Host work.github.com
    HostName github.com
    User WORK_GITHUB_USERNAME
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_work_rsa
    IdentitiesOnly yes

Host personal.github.com
    HostName github.com
    User PERSONAL_GITHUB_USERNAME 
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_personal_rsa
    IdentitiesOnly yes

Jede Eigenschaft klingt ziemlich selbsterklärend, aber die IdentitiesOnlyeine. Ich werde nicht versuchen zu erklären, wofür das ist, aber das ist in meinem aktuellen Setup und funktioniert gut.

Es ist auch erwähnenswert, dass dies Host URLnur ein Zeiger ist, um die richtigen Benutzereinstellungen zu erhalten, und keinen Einfluss darauf hat, wie die Dateien korrekt auf Ihre Ziel- HostNameURL übertragen werden.

Jetzt müssen Sie nur noch sicherstellen, dass Ihre origin(oder eine remoteallgemein) URL mit der richtigen HostURL in Ihren jeweiligen Repos übereinstimmt, abhängig von Ihrem Benutzernamen. Wenn Sie bereits über persönliche Repos verfügen, können Sie die .git/configDatei dieses Repos in Ihrem Texteditor bearbeiten :

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = [email protected]:PERSONAL_GITHUB_USERNAME/project.git

oder machen Sie es über die Kommandozeile:

git remote set-url origin [email protected]:PERSONAL_GITHUB_USERNAME/project.git

Ebenso zu Ihrer Arbeit:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = [email protected]:your_work_organization/project.git

oder wieder über die Kommandozeile:

git remote set-url origin [email protected]:your_work_organization/project.git

Natürlich können Sie jederzeit eine Ihrer HostURLs in Ihrer ~/.ssh/configDatei als einfach festlegen

Host github.com

Früher habe ich nur work.github.comdie Konfigurationsbeziehungen einfacher gesehen.

Sobald diese alle eingestellt sind, sollten Sie in der Lage sein, auf die jeweilige Fernbedienung zu drücken.

BEARBEITEN

Eine Sache, die ich gerade selbst herausgefunden habe, ist, dass git Ihre Commits als dieser E-Mail-Benutzer anzeigt, wenn Sie jemals globale Git-Konfigurationswerte für Ihren user.emailWert festlegen (und ich vermute, dass user.namedies auch einen anderen Wert senden würde). Um dies zu umgehen, können Sie die globalen Git-Konfigurationseinstellungen in Ihrem lokalen Repository überschreiben:

$ git config user.name "John Doe"
$ git config user.email [email protected]

Dies sollte nun Commits als korrekter Benutzer für dieses Repo senden.

Hellatan
quelle
3
Klappt wunderbar. Danke dir!
NorthBridge
1
Diese Seite erklärt die ssh-Konfigurationsdatei ausführlicher für alle Interessierten.
Phil
3
Die hilfreichste Antwort auf jeden Fall. Vielen Dank.
limp_chimp
Brillant! Vielen Dank!
Fydo
1
Der Schlüssel, den ich vermisst habe, war die Angabe des SSH-Hosts in der .git / config - Vielen Dank!
xdotcommer
45

Gehen Sie zu Systemsteuerung> Benutzerkonten> Anmeldeinformations-Manager> Allgemeine Anmeldeinformationen

Entfernen Sie die Git-Anmeldeinformationen. Dann git push ausführen. Dadurch werden Sie aufgefordert, nach den Git-Anmeldeinformationen zu fragen. Geben Sie Ihre korrekten Anmeldeinformationen ein.

Rajan Patil
quelle
3
Dies hat mein Problem beim Ausführen von Git Bash unter Windows 10 behoben. Danke @ rajan-patil
verdächtige_williams
Für diejenigen, die nicht die Windows-GUI in Englisch haben, können Sie den Anmeldeinformations-Manager erreichen, indem Sie control /name Microsoft.CredentialManagerin der Befehlszeile
eingeben
seltsam, aber es funktioniert nur dann gut, wenn ich Git Bash starte (wie oben erwähnt), aber wenn ich weiterhin dasselbe Terminal verwende, das ich git pushmit einem Fehler gestartet habe , werden auch nach dem Neustart des Terminals immer dieselben Fehler ausgegeben. Aber trotzdem danke - es hat mir am Ende viel Zeit gespart
Kostyantyn Didenko
Dies ist definitiv die beste Antwort, die mir begegnet ist. Der Rest war verworren, aber das war einfach und präzise.
Cladekennilol
Das funktioniert EINMAL. Nachdem Sie die Konten erneut hinzugefügt haben, tritt weiterhin das gleiche Problem auf.
Megakoresh
37

Sie können auch einfach zu https anstatt zu ssh wechseln. Wenn Sie https verwenden, werden die Einstellungen für .git / config berücksichtigt. Ändern Sie also in .git / config:

url = [email protected]:USER/PROJECT.git

zu

url = https://[email protected]/USER/PROJECT.git

(Diese Werte befinden sich auf der Git-Projektseite. Klicken Sie auf die Schaltflächen SSHund HTTP, um die neuen Werte anzuzeigen.)

Yuttadhammo
quelle
2
+1! Dies ist eine wirklich gute Lösung für einmalige Pushs von Leihautomaten usw., bei denen Sie keine privaten Schlüssel usw. installieren möchten
lambshaanxy
1
Ich denke, das einzige Problem bei der Verwendung httpsist, dass Sie den Benutzer / Pass jedes Mal push
eingeben
Ich weiß, das ist super alt, aber DANKE. Mein Computer ist nicht für ssh eingerichtet, aber es wurde immer noch versucht, für einen einmaligen Push auf mein Arbeits-Github-Konto anstatt auf mein persönliches Konto zu pushen. Habe dies in meiner .git / config in meinem Projektverzeichnis verwendet und habe super funktioniert. Yay! Upvote für Sie.
Sady
2
Seien Sie sich bewusst, dass Sie dies auch tun können git push https://username:[email protected]/user/repo.git... wenn Sie mit passIhrer Shell-Geschichte
Plato
Dies ist die beste Lösung. Danke dir!
Codemicky
33

github identifiziert Sie anhand des SSH-Schlüssels, den es sieht, und nicht anhand einer Einstellung von git.

Daher müssen Sie sicherstellen, dass sich der SSH-Schlüssel Ihres Arbeitskontos nicht in Ihrem Schlüsselbund befindet, wenn Sie versuchen, als Ihr persönliches Konto zu pushen, und umgekehrt. Verwenden ssh-add -lSie diese Option, um festzustellen, welche Schlüssel sich in Ihrem Schlüsselbund befinden, und ssh-add -d keyfileum einen Schlüssel aus Ihrem Schlüsselbund zu entfernen.

Möglicherweise müssen Sie auch überprüfen, ~/.ssh/configob Sie es so konfiguriert haben, dass bestimmte SSH-Schlüssel für Github angezeigt werden. Schließlich weiß ich nicht, wie Github mit zwei Konten mit demselben öffentlichen SSH-Schlüssel umgeht. Stellen Sie also sicher, dass Sie dies nicht tun.

Walter Mundt
quelle
3
Bei Bedarf können Sie auch die GIT_SSHUmgebungsvariable verwenden, um git anzuweisen, einen anderen Befehl für ssh zu verwenden. Insbesondere können Sie einen bestimmten Schlüssel verwenden. Siehe die Haupt-Git-Manpage oder vielleicht diese Frage .
Cascabel
Auf meinem System (OSX 10.5) war der Befehl zum Löschen des Schlüssels aus dem Schlüsselringssh-add -d keyfile
Motin
Danke @Motin, das wollte ich eigentlich sagen. Bearbeitet.
Walter Mundt
12

Ich hatte kürzlich das gleiche Problem, weil ich ein neues Github-Konto erstellt habe. Ich habe die obigen Antworten ausprobiert, aber es hat nicht geholfen. Dann habe ich irgendwo einen Beitrag über das Löschen von Github aus Keychain Access gesehen (nur wenn Sie einen Mac verwenden ). Wenn ich einen Push mache, frage ich nach Benutzername und Passwort und es hat funktioniert!

flipjs.io
quelle
@Carpetsmoker Es klingt so, als ob das OP eine Mac-spezifische Lösung anbietet.
Zev Spitz
1
Bitte versuchen Sie den Originalbeitrag zu finden und als Link hinzuzufügen.
Zev Spitz
11

Ich hatte das gleiche Problem. Es stellte sich heraus, dass ich zwei Konten auf GitHub mit demselben SSH-Schlüssel hatte und GitHub standardmäßig das falsche Konto verwendete, das keine Berechtigung für das Repo hatte, nach dem ich gesucht hatte. Ich habe den SSH-Schlüssel von dem Konto entfernt, das ich nicht verwendet habe, um alles wie erwartet zu verwenden.

Sie können testen, mit welchem ​​Konto sich GitHub authentifiziert:

ssh -T [email protected]

Für mich zeigte dies ursprünglich den falschen Benutzernamen, aber nachdem ich den doppelten SSH-Schlüssel von diesem Konto entfernt hatte, zeigte es den richtigen Benutzernamen an und mein Pull and Push zu meinem Repo funktionierte gut.

Ryan
quelle
8

Ich weiß, dass dies etwas spät sein könnte, aber ich war einige Zeit damit beschäftigt und habe es schließlich so behoben:

Beispiel Screenshot

  • Gehen Sie in den Schlüsselbundzugriff (osX)

  • Suche git (stellen Sie sicher, dass Sie Alle Elemente ausgewählt haben)

  • Hier finden Sie die Täterausweise. Lösche sie.

Hoffe das hilft!

A. Dev
quelle
Dies war die einzige Antwort, die mir geholfen hat!
Wilder Pereira
Diese Antwort hat mir geholfen, das Problem auf dem Mac zu beheben.
Javascript Hupp Technologies
6

Dies ist eine Möglichkeit, dies zu tun: Sie können verschiedene SSH-Konfigurationen für verschiedene SSH-Konten verwenden.

Aktualisiert am 22. Februar:

Überprüfen Sie diesen Link: https://gist.github.com/2351996

fragtw0rder
quelle
Das verknüpfte Gist und der erste Kommentar auf der Gist-Seite haben für mich perfekt funktioniert. Ich denke, dies ist Walter Mundts Antwort überlegen, da Sie mehrere Schlüssel auf Ihrem Schlüsselbund lassen können und alles „einfach funktioniert“.
Keybits
3

Wenn das Ändern des dem Konto zugeordneten SSH-Schlüssels nicht funktioniert, ändern Sie die dem Konto zugeordnete E-Mail.

Gehen Sie zu Github> Kontoeinstellungen> E-Mails und überprüfen Sie, ob die E-Mail-Adresse, die Sie zum Festschreiben verwenden, mit der E-Mail im Konto übereinstimmt.

Führen Sie den folgenden Befehl aus, um zu sehen, welche E-Mail-Adresse Sie zum Festschreiben verwenden : git config --global user.email. Wenn Sie die E-Mail-Adresse ändern müssen, die Sie zum Festschreiben verwenden, führen Sie aus git config --global user.email "[email protected]".

Baub
quelle
2

Ich habe das gleiche Problem. Folgendes passiert in meinem Fall:

Ich habe git zuvor dazu gebracht, nicht jedes Mal, wenn ich mit dem Remote-Repository spreche, nach meinem Berechtigungsnachweis zu fragen: git config --global credential.helper wincred

Ich habe das Problem behoben, indem ich denselben Befehl ausgeführt habe, wobei "none" "wincred" git config --global credential.helper none ersetzt hat

Dann frag nochmal meinen Benutzernamen / Pass und alles läuft gut

Hung Cao
quelle
1

Ich hatte auch dieses Problem, aber keine der anderen Lösungen funktionierte für mich. Es stellt sich heraus, dass wir für die Arbeit eine .netrcDatei erstellt hatten, die Einträge für die Github-Authentifizierung enthielt. Der gitBefehl verwendete immer das .netrc, das meinen alten Benutzernamen und mein Passwort hatte. Ich musste die Einträge in meiner .netrcDatei bearbeiten , um den neuen Benutzernamen und das neue Passwort zu verwenden.

Steven Lambert
quelle
1

Ich habe eine temporäre Lösung gefunden, bei der zuerst ausgeführt und killall ssh-agentdann die SSH-Schlüssel hinzugefügt werden, die für das Konto generiert wurden, das Sie verwenden müssenssh-add ~/.ssh/id_4shameer

Dies ist die einzige Möglichkeit, wie wir an dem Konto mit mehreren Githubs arbeiten können, wenn der Typfehler auftritt ERROR: Permission to user/repo-git.git denied to username.

mshameer
quelle
1

Ich hatte noch nie Probleme mit Git, bis sie bei der Arbeit kürzlich unsere Macbooks mit Active Directory verbunden und meinem Computer einige Administratorkonten hinzugefügt haben. Danach würde Git jedoch gut funktionieren, bis ich meinen Bildschirm sperrte und zurückkam. Dann würde ich einen vagen Fehler ähnlich bekommen

No user exists for uid 1927040837
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Ich habe nur einen SSH-Schlüssel auf diesem bestimmten Computer für meinen Benutzer und verwende in meiner Laufzeit zsh. Die E-Mail-Adresse und der Name des Benutzers waren korrekt, sodass dies nicht das Problem war. Ergo ist ein Neustart nach jedem Sperren meiner Maschine zwecklos. Die Lösung für mich bestand darin, meine .zshrcDatei zu bearbeiten und die Zeile zu kommentieren, die den ssh-Schlüssel exportiert (was ich noch nie zuvor tun musste und seit Jahren zsh verwende).

Die Linie sollte ungefähr so ​​aussehen:

# ssh
export SSH_KEY_PATH="~/.ssh/<your_rsa_id>"

Sobald Sie dies getan haben, führen Sie einfach ein resetIn-Terminal aus und alles funktioniert einwandfrei.

Ich hoffe das hilft jemand anderem.

Andruw Hart
quelle
0

Ich möchte hinzufügen - Wenn Sie an einem Konto eines anderen Benutzers arbeiten, stellen Sie sicher, dass Sie sich unter den Repository-Einstellungen zum Bereich für Mitarbeiter hinzufügen.

Dan Kelly
quelle