Wie kann ich unter einem anderen Benutzernamen auf GitHub pushen?

154

Ein Freund und ich teilen meinen Computer. Ich habe mit der Git-Bash-Shell unter Windows 7 Pushs an GitHub durchgeführt. Jetzt befinden wir uns in einem anderen Projekt auf diesem Computer und sie muss auf ihr Konto pushen. Aber es wird immer wieder versucht, meinen Benutzernamen zu verwenden und zu sagen, dass ich keinen Zugriff auf ihr Repository habe:

$ 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
beim.
quelle
Hilft dies.github.com/articles/setting-your-email-in-git (Verwendung git config --global user.name her_username) vor dem Drücken
Prinzhorn
Ich sehe, dass Sie zu HTTPS-URLs gewechselt sind, sodass Github immer zur Eingabe von Anmeldeinformationen auffordert. Denken Sie daran, dass die Commits weiterhin so aufgezeichnet werden, wie sie vom Benutzer in git config user.name und git config user.email ausgeführt wurden, unabhängig davon, wer den Push tatsächlich ausführt. ps Ich glaube nicht, dass es eine Geschichte gibt, wer was vorangetrieben hat.
Jorge Orpinel
28
git config --local credential.helper ""kann den Trick tun.
SOFe
Ich konnte keine der hier angegebenen Lösungen auf meinem Windows-System verfolgen. Die Schritte in dieser Antwort funktionierten schließlich stackoverflow.com/a/15382950/351903
Sandeepan Nath
@ SOFe das habe ich gesucht! Löscht dieser Befehl effektiv einige zwischengespeicherte Anmeldeinformationen?
CCJ

Antworten:

92

Wenn Sie einen anderen Windows-Benutzer verwenden, sind Ihre SSH-Schlüssel- und Git-Einstellungen unabhängig.

Wenn dies für Sie keine Option ist, sollte Ihre Freundin Ihren SSH-Schlüssel zu ihrem Github-Konto hinzufügen.

Die vorherige Lösung wird Sie zwar weiter wie Sie selbst pushen lassen, aber es wird Ihnen ermöglichen, in ihr Repo zu pushen. Wenn Sie dies nicht möchten und in einem anderen Ordner auf demselben PC arbeiten, können Sie den Benutzernamen und die E-Mail-Adresse lokal in einem Ordner mit git einrichten, indem Sie das -gFlag des Befehls config entfernen :

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

Wenn Sie das httpsProtokoll übertragen, fordert Github alternativ jedes Mal zur Eingabe des Benutzernamens / Kennworts auf (es sei denn, Sie verwenden einen Kennwortmanager).

Simon Boudrias
quelle
6
Soweit ich mich erinnere, müssen SSH-Schlüssel auf Github eindeutig sein. Sie können nicht denselben Schlüssel an mehrere Konten anhängen
Gareth,
@Gareth Vielleicht, aber Sie können in Windows (und überall, wo ich weiß) mehrere SSH-Schlüssel für denselben Benutzer festlegen.
Simon Boudrias
Ich kann keine zwei Schlüssel haben, siehe meine Antwort unten.
Chovy
1
Für jedes Projekt:git config --global user.name "Mona Lisa"
w3spi
235

Dies hat bei mir funktioniert, es wird nach Benutzername und Passwort gefragt

git config --local credential.helper ""
git push origin master
Rangierer
quelle
1
Danke, es hat bei mir funktioniert, ich habe Bitbucket verwendet und meinen Benutzernamen konfiguriert, aber dies hat die Migration zu aws code-commit gelöst
Alejandro Ruiz
Ich hatte helper = cache --timeout=999999mich auf meine gesetzt .gitignoreund das funktionierte. Aber wie kann ich das zurücksetzen, ohne eine lokale Konfiguration zu ändern?
Ciro Santilli 法轮功 冠状 病 六四 事件 7
Das ist großartig!
hargun3045
Das habe ich gesucht !!!
aagjalpankaj
1
Erklären Sie hier besser, was es tut: Es konfiguriert Ihr lokales Repo so, dass es das (wahrscheinlich global) konfigurierte ignoriert credential.helper, z. B. den Windows-Anmeldeinformationsspeicher. Dies bedeutet auch, dass jedes Mal , wenn es benötigt wird, nach einem Benutzernamen / Passwort gefragt wird , da nichts konfiguriert ist. Vielleicht können Sie credential.helperstattdessen auch den Cache konfigurieren (siehe Antwort von @Ciro Santilli) oder hier eine andere Antwort verwenden.
Rugk
50

Sie können mit einem anderen Konto pushen. Wenn Ihr Konto beispielsweise A ist, das in .gitconfig gespeichert ist, und Sie Konto B verwenden möchten, das der Eigentümer des Repos ist, das Sie pushen möchten.

Konto B : B_Benutzername, B_Kennwort
Beispiel für einen SSH-Link: https://github.com/B_Benutzername/Projekt.git

Der Push mit B- Account lautet:

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

So zeigen Sie das Konto in .gitconfig an

  1. $git config --global --list
  2. $git config --global -e (um auch das Konto zu wechseln)
thotruong
quelle
Wow das ist die Antwort !! Ich habe festgelegt user.name, user.emailin der lokalen Konfiguration, ich habe mit dem Benutzernamen geklont, und nicht funktioniert; Jetzt funktioniert die letzte Antwort, ohne den Schlüsselbund zu berühren Git 2.9.0 in Windows. "endlich aber nicht zuletzt" .. so heißt es. Danke dir. Diese Antwort verdient mehr Zustimmung.
WesternGun
3
Der einzige Nebeneffekt ist, dass Ihr Passwort / Benutzername in der Bash-Historie aufgezeichnet ist. Aber es funktioniert für mich.
WesternGun
Danke dafür, genau das wollte ich tun. Dies drängt jedoch zu meistern. Wie würde ich zu einer Filiale neben Master wechseln?
Steven Anderson
1
@WesternGun Geben Sie kein Passwort in der URL an, wenn Sie verhindern möchten, dass es im Bash-Verlauf aufgezeichnet wird. Verwenden Sie https://'B_user_name'@github.com/B_user_name/project.git. Dies sollte zur Eingabe des Passworts von auffordern B_user_name.
subtleseeker
24

Ich habe einen SSH-Alias ​​mit einem benutzerdefinierten Namen eingerichtet IdentityFileund den Ursprung neu geschrieben, um meinen benutzerdefinierten me-githubHostnamen zu verwenden.

#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
quelle
5
Anstatt zu entfernen und dann hinzuzufügen, können wir die Remote-URL ändern durch: git remote set-url origin git@user1-github:user1/my-repo.git 😊
Ninh Pham
18

Wenn Sie [email protected]:username/projectname.gitanstelle einer HTTPS-URL eine SSH-URL ( ) verwenden, können Sie mithilfe der $GIT_SSH_COMMANDUmgebungsvariablen vorübergehend einen anderen SSH-Schlüssel angeben :

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

Soweit ich das beurteilen kann, kümmert sich GitHub bei SSH-URLs nicht um Benutzernamen, sondern nur um Schlüssel: Wenn ein Benutzerkonto Zugriff auf ein Repository hat und dieses Konto über einen SSH-Schlüssel verfügt (siehe die Seite SSH-Schlüssel im Konto) Einstellungen). Wenn Sie diesen SSH-Schlüssel verwenden, um in dieses Repository zu pushen, wird der Push als von diesem Benutzer stammend behandelt.

David Moles
quelle
1
Interessanterweise hat dies bei mir nicht funktioniert. Durch Ändern des user.nameund user.emailin git configwird das Konto geändert, mit dem ein Commit verbunden ist
Kevin Zhao
Es hat bei mir funktioniert. Nur ein kleiner Kommentar, um die Antwort klarer zu machen. "different_private_key" ist eine Datei auf dem HostA, die den privaten Schlüssel des Benutzers B enthält, für den wir "Git Push" auf dem HostA ausführen möchten, der BenutzerA ist. Sie müssen diese Datei auf dem HostA erstellen (z. B. als ~ / .ssh / id_rsa_userB) und dort den Inhalt der Datei ~ / .ssh / id_rsa von dem HostB ablegen, auf dem BenutzerB vorhanden ist. Es spielt sogar keine Rolle, ob der Benutzer B auf dem Host A existiert oder nicht.
Alexander Samoylov
15

Wenn git pushGit nach dem Ausführen nach einem Kennwort von fragt user, Sie aber als pushen new_usermöchten, möchten Sie möglicherweise Folgendes verwenden git config remote.origin.url:

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

An diesem Punkt verwenden Sie, um ^Czu beenden git pushund verwenden Sie Folgendes, um als zu drücken 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
quelle
Hallo, ich habe diese Lösung ausprobiert, um auf atlassian stash zu pushen. Ich erhalte die Fehlermeldung "<URL> / info / refs nicht gefunden: Haben Sie git update-server-info auf dem Server ausgeführt?" Ich glaube nicht, dass ich Befehle auf Stash ausführen kann. Haben Sie eine Idee, wie Sie das lösen können? Vielen Dank!
Zsolt Szilagyi
Für GitHub würde dies so aussehen:git config remote.origin.url https://[email protected]/different_user/repo.git
NumesSanguis
13

Während des Klonens ist es einfach, bitte geben Sie die Git-URL mit Ihrem Benutzernamen an. Während Sie diese festlegen, werden Sie nach Ihrem neuen Benutzerpasswort gefragt.

Z.B:

Git-Klon https: //[email protected]/username/reponame.git

Git-Klon https: //[email protected]/username/reponame.git

Krishnamoorthy Acharya
quelle
4
Diese Antwort sollte mindestens mehr positive Stimmen haben. Wenn Sie nicht das tun, was @Krishna Kavoor sagt, haben Sie immer das Problem, denn obwohl Sie global den Benutzernamen1 und lokal den Benutzernamen2 haben, wird git versuchen, den globalen Namen zu verwenden.
Markon
Es funktioniert nicht. Ich habe es benutzt und es heißt : fatal: repo not found.
WesternGun
1
Es funktioniert immer Da ich 3 verschiedene Projekte von 3 verschiedenen Kunden habe. Es funktioniert wie ein Wunder. Bitte überprüfen Sie, ob Ihr Repo-Pfad korrekt ist.
Krishnamoorthy Acharya
7

wenn das dein Problem ist

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

Zusätzlich zum Ändern des Benutzernamens und der E-Mail-Adresse vom Terminal mithilfe der Git-Konfiguration:

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

Sie müssen Autorisierungsinformationen aus dem Schlüsselbund entfernen. Ich brauchte mehrere Stunden, um diese Lösung herauszufinden. Ich stellte fest, dass ich auch ein Zertifikat in meinem Schlüsselbund hatte.

Öffnen Sie den Schlüsselbundzugriff, klicken Sie auf Alle Elemente und suchen Sie nach git. Löschen Sie alle Schlüsselbunde

Muyide Ibukun
quelle
Was ist das Windows 7-Gegenstück zu Keychain?
Thomas Eyde
Ich
bin mir
Ich glaube, ich stecke auch hier fest. Hast du herausgefunden?
Sandeepan Nath
Nein, habe es schließlich nicht herausgefunden, aber ich denke, es sollte nicht so schwierig sein
Muyide Ibukun
1
Vielen Dank für den Vorschlag zum Entfernen von Autorisierungsinformationen aus dem Schlüsselbund
Luja Shrestha
7

Ich habe einen Computer verwendet, um Code auf zwei verschiedene GitHub-Konten mit unterschiedlichem Benutzernamen zu übertragen. Angenommen, Sie haben bereits ein Konto eingerichtet und möchten ein neues hinzufügen:

  1. Generieren Sie einen neuen SSH-Schlüssel ssh-keygen -t rsa -C "[email protected]"
  2. Speichern Sie es, aber denken Sie daran, das vorhandene nicht zu überschreiben id_rsa. Geben Sie ihm einen anderen Namen, zid_rsa_another
  3. Kopieren Sie den Inhalt des Schlüssels in Ihr GitHub-Konto:

Einstellungen -> SSH- und GPG-Schlüssel -> Neuer SSH-Schlüssel -> Geben Sie eine Bezeichnung und fügen Sie den Schlüssel ein -> SSH-Schlüssel hinzufügen

  1. Fügen Sie dem ssh-Agenten den Schlüssel hinzu: ssh-add ~/.ssh/id_rsa_another
  2. Einrichten eines GitHub-Hosts: Erstellen Sie eine Konfigurationsdatei mit touch ~/.ssh/configund bearbeiten Sie die Datei, indem Sie Ihren Konten Konfigurationen bereitstellen:
#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

Jetzt sollten Sie in der Lage sein, von verschiedenen Konten aus zu pushen, je nachdem, welchen Schlüssel Sie dem SSH-Agenten hinzufügen, dh um Ihr erstes Konto zu verwenden ssh-add ~/.ssh/id_rsa.

Möglicherweise möchten Sie auch Ihre Benutzer-E-Mail-Adresse ändern:

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

oder bereinigen Sie SSH-Schlüssel im Falle eines Berechtigungsfehlers, wenn Sie Code in eines der Konten eingeben:

ssh-add -D

Tomasz Bartkowiak
quelle
1
Ja, ich habe bereits mehrere Konten festgelegt. Aber wie kann ich mit erstem Account pushen. Können Sie bitte Befehl teilen?
Codemicky
Was meinst du mit "wie kann ich pushen"? Funktioniert git pushnicht Sie sollten in der Lage sein, nach dem Hinzufügen Ihres Schlüssels zu drücken
Tomasz Bartkowiak
Sie sollten Benutzer für jedes Repo-Projekt festlegen $ git config user.email
jasmintmp
6

Zum Anmeldeinformations-Manager wechseln Zu Windows-Anmeldeinformationen wechseln Löschen Sie die Einträge unter Allgemeine Anmeldeinformationen. Versuchen Sie erneut, eine Verbindung herzustellen.

Deepak
quelle
Vielen Dank. Der Weg ist Control Panel\All Control Panel Items\Credential Manager-> Windows Credentials.
Saheed
4

Wie bereits erwähnt, können Sie verwenden

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

Um den Benutzernamen und die E-Mail-Adresse für ein einzelnes Repo manuell festzulegen, müssen Sie diesen Befehl hinzufügen:

git commit --amend --reset-author

wenn Sie bereits versucht haben, vor der Änderung zu pushen. Andernfalls werden die Änderungen nicht in der Konfigurationsdatei angezeigt.

Martin819
quelle
Das ist nicht wahr. Das --reset-author(mit --...) setzt den zuletzt konfigurierten Namen / die E-Mail-Adresse beim letzten Commit sowie den neuesten Zeitstempel. Die Änderungen in der Konfigurationsdatei sind davon nicht betroffen.
Ramon Snir
3

Sie können eine neue Remote-URL für den anderen Benutzernamen mit hinzufügen git remote add origin-username https://[email protected]/repository_name.git

Wenn Sie danach mit drücken git push -u origin-username master, werden Sie zur Eingabe des Kennworts aufgefordert.

Raman Singh
quelle
2

git config user.name ändert nur den Namen, den ich festschreibe. Ich kann immer noch nicht pushen. So habe ich es gelöst und ich denke, es ist ein einfacher Weg für mich.

  1. Generieren Sie einen SSH-Schlüssel unter dem Benutzernamen, den Sie auf dem Computer verwenden möchten, den Sie verwenden möchten Https://help.github.com/articles/connecting-to-github-with-ssh/

  2. Fügen Sie diesen Schlüssel dem Github-Benutzerkonto hinzu, das Sie an https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/ senden möchten.

  3. Wählen Sie "Mit SSH klonen"

Sie können diesen Benutzer jetzt in dieses Repo einbinden.

Yang Fang
quelle
2

Unter Windows und dem Benutzer Git für Windows und managerzum Verwalten der Anmeldeinformationen (auch bekannt als Git-Credential-Manager-for-Windows Link ) besteht das Problem darin, dass es keine einfache Möglichkeit gibt, zwischen Benutzern zu wechseln, wenn Sie über die httpsVerwendung zu GitHub wechselnOAuth Token .

Der Grund ist, dass das Token gespeichert wird als:

  • Internetadresse: git:https://github.com
  • Nutzername: Personal Access Token
  • Passwort: OAuth_Token

Variationen der URL in Internet Addressfunktionieren nicht, zum Beispiel:

Die Lösung: Namespaces . Dies finden Sie in den Details zur Konfiguration der Git-Credential-Manager-for-Windows:

Zitat daraus:

Namespace

Legt den Namespace für gespeicherte Anmeldeinformationen fest.

Standardmäßig verwendet der GCM den 'git'-Namespace für alle gespeicherten Anmeldeinformationen. Wenn Sie diesen Konfigurationswert festlegen, können Sie den global oder pro Host verwendeten Namespace steuern.

git config --global credential.namespace name

Speichern Sie nun Ihre Anmeldeinformationen im Windows-Anmeldeinformations-Manager wie folgt:

  • Internetadresse: git.username:https://github.com
  • Nutzername: Personal Access Token
  • Passwort: OAuth_Token

Beachten Sie, dass wir Folgendes geändert haben: git-> git.username(wo Sie usernamezu Ihrem tatsächlichen Benutzernamen oder aus diesem Grund zu dem wechseln , was Sie als eindeutige Kennung wünschen)

Führen Sie nun im Repository, in dem Sie den bestimmten Eintrag verwenden möchten, Folgendes aus:

git config credential.namespace git.username

(Wieder ... durch usernameden gewünschten Wert ersetzen )

Ihr .git/configTestament enthält jetzt:

[credential]
    namespace = git.username

Et voilá! Die richtigen Anmeldeinformationen werden aus dem Windows-Anmeldeinformationsspeicher abgerufen.

Dies ändert natürlich nichts daran, welcher Benutzer / welche E-Mail pusht. Dafür müssen Sie das übliche user.nameund konfigurierenuser.email

Andenken
quelle
Danke dir. Dies funktionierte am besten für mich (Windows 10). Kein vorübergehendes Löschen anderer Git-Benutzerkonten in Windows-Anmeldeinformationen, keine "Hacks". Ich habe einen globalen / Host-Git-Benutzer für alle Repositorys. Nur dass nur einer von ihnen unterschiedliche Anmeldeinformationen erfordert. Wenn dies auch zu Ihrer Umgebung passt, lassen Sie einfach alles so, wie es in den Windows-Anmeldeinformationen enthalten ist, gehen Sie zu Ihrem "speziellen" Repository und geben Sie git config credential.namespace git.usernamewie erwähnt ein (ersetzen Sie den Benutzernamen). Wenn Sie das nächste Mal pushen, werden Sie von git nach den neuen Anmeldeinformationen für den Benutzernamen gefragt.
Ford04
2

Ich konnte nicht herausfinden, wie ich eine zweite Github-Identität auf einem Computer haben kann (keine dieser Antworten hat für mich funktioniert), aber ich habe herausgefunden, wie ich als ich auf mehrere verschiedene Github-Konten pushen kann.

Push als gleichen Benutzernamen, aber auf verschiedene Github-Accounts

  1. Richten Sie einen zweiten SSH-Schlüssel ( wie folgt) für Ihr zweites Github-Konto ein

  2. Wechsel zwischen Konten also:

Push mit meinem neuen 2. Github Account

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

Push mit meinem Hauptkonto

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

Wenn Sie https://desktop.github.com/ haben
, können Sie zu Einstellungen (oder Optionen) -> Konten gehen
und sich dann abmelden und anmelden.

Ehrlich abe
quelle
Es gibt kein Einstellungsmenü?
Thomas Eyde
@ThomasEyde Es gibt auf macOS. Es ist "Optionen" unter Windows.
Ehrliche Abe
0

Die Benutzer-ID, unter der das Festschreiben erfolgt, wird in der Konfigurationsdatei gespeichert.

Gehen Sie zum Anfang des Repositorys vi .git / config

Ändern Sie die nach "[remote" origin "] aufgeführte URL-Zeile, um die entsprechende Benutzer-ID zu erhalten

wainCam
quelle
0

Wenn Sie ssh verwenden und erhalten

Die Berechtigung für some_username / repository.git wurde Alice_username verweigert

Während Sie nicht als Alice_Benutzername pushen möchten, stellen Sie sicher, dass Alice_Benutzername nicht den SSH-Schlüssel Ihres Computers zu seinem Github-Konto hinzugefügt hat.

Ich habe meinen SSH-Schlüssel aus Alice 'Github-Account gelöscht und der Push hat funktioniert.

Achraf Amil
quelle