Ein Freund und ich teilen meinen Computer. Ich habe GitHub mit der Git-bash-Shell unter Windows 7 angestoßen. Nun befinden wir uns in einem anderen Projekt auf diesem Computer und ich muss sie dazu bringen, auf ihr Konto zu drücken. Es wird jedoch immer 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
Wenn Sie einen anderen Windows-Benutzer verwenden, sind Ihre SSH-Schlüssel- und Git-Einstellungen unabhängig.
Wenn dies keine Option für Sie ist, sollte Ihr Freund Ihren SSH-Schlüssel zu Ihrem Github-Konto hinzufügen.
Obwohl die vorherige Lösung Sie weiterhin als Sie selbst pushen lässt, können Sie jedoch in ihr Repo einsteigen. Wenn Sie dies nicht wünschen und in einem anderen Ordner auf demselben PC arbeiten möchten, können Sie den Benutzernamen und die E-Mail-Adresse in einem Ordner mit git lokal einrichten, indem Sie das Flag -g
des Befehls config entfernen:
git config user.name her_username
git config user.email her_email
Alternativ, wenn Sie das https
-Protokoll übertragen, fordert Github jedes Mal zur Eingabe eines Benutzernamens/Kennworts auf (sofern Sie keinen Kennwortmanager verwenden).
Das hat für mich funktioniert, es wird nach Benutzername und Passwort gefragt
git config --local credential.helper ""
git Push Origin master
Ich richte einen SSH-Alias mit einer benutzerdefinierten IdentityFile
ein und schrieb den Origin um, um meinen benutzerdefinierten me-github
-Hostnamen 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 [email protected]:user1/my-repo.git
Sie können Push mit einem anderen Konto verwenden. Wenn Ihr Konto beispielsweise A ist und in .gitconfig gespeichert ist und Sie Konto B verwenden möchten, das der Besitzer des Repos ist, das Sie pushen möchten.
Konto B: B_Benutzername, B_Kennwort
Beispiel für eine SSH-Verknüpfung: https://github.com/B_Benutzername/Projekt.git
Das Konto Push mit B lautet:
$ git Push https://'B_user_name':'B_password'@github.com/B_user_name/project.git
Um das Konto in .gitconfig anzuzeigen
$git config --global --list
$git config --global -e
(auch um das Konto zu ändern)Wenn Sie nach dem Ausführen von git Push
Git nach einem Kennwort von user
fragen, aber Sie möchten als new_user
drücken, möchten Sie git config remote.Origin.url
verwenden:
$ git Push
[email protected]:either/branch/or/path's password:
Verwenden Sie an diesem Punkt ^C
, um git Push
zu beenden, und verwenden Sie folgend, um als new_user
zu drücken.
$ 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:
Wenn Sie anstelle einer HTTPS-URL eine SSH-URL ([email protected]:username/projectname.git
) verwenden, können Sie mit der Umgebungsvariablen $GIT_SSH_COMMAND
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 Seite SSH-Schlüssel in den Kontoeinstellungen). Wenn Sie diesen SSH-Schlüssel zum Push in das Repository verwenden, wird der Push als von diesem Benutzer stammend behandelt.
Während des Klonens ist es einfach, die git-URL mit Ihrem Benutzernamen zu verwenden. Beim Festschreiben wird das neue Benutzerpasswort abgefragt.
Z.B:
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 vom Terminal mit git config:
$ git config --global user.name "Bob"
$ git config --global user.email "[email protected]"
sie müssen die Berechtigungsinformationen von Keychain entfernen. Diese Lösung brauchte mehrere Stunden, um herauszufinden, ob ich auch ein Zertifikat in meinem Schlüsselbund hatte.
Öffnen Sie den Schlüsselbund-Zugriff, klicken Sie auf Alle Elemente und suchen Sie nach Git. Löschen Sie alle Schlüsselbunde
Gehen Sie zu Credential Manager Gehen Sie zu Windows Credentials Löschen Sie die Einträge unter Generic Credentials Versuchen Sie erneut, eine Verbindung herzustellen.
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 manuell für ein einzelnes Repo festzulegen, müssen Sie den folgenden Befehl hinzufügen:
git commit --amend --reset-author
wenn Sie bereits vor der Änderung versucht haben, Push auszuführen. Andernfalls werden die Änderungen nicht in der Konfigurationsdatei angezeigt.
Ich habe eine Maschine verwendet, um Code an zwei verschiedene GitHub-Konten mit unterschiedlichen Benutzernamen zu übertragen. Angenommen, Sie haben bereits ein Konto eingerichtet und möchten ein neues Konto hinzufügen:
ssh-keygen -t rsa -C "[email protected]"
id_rsa
zu überschreiben. Geben Sie ihm einen anderen Namen, z. id_rsa_another
Einstellungen -> SSH- und GPG-Schlüssel -> Neuer SSH-Schlüssel -> Geben Sie eine Bezeichnung und eine Einfügung der Schlüssel -> SSH-Schlüssel hinzufügen
ssh-add ~/.ssh/id_rsa_another
touch ~/.ssh/config
und bearbeiten Sie die Datei, indem Sie Ihren Konten Konfigurationen zuweisen:#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
Nun sollten Sie in der Lage sein, Push von verschiedenen Konten abhängig zu machen, je nachdem, welchen Schlüssel Sie dem ssh-Agenten hinzufügen, d. H., Um Ihr erstes Konto zu verwenden, tun Sie ssh-add ~/.ssh/id_rsa
.
Möglicherweise möchten Sie auch Ihre E-Mail-Adresse ändern:
git config --global user.email "[email protected]"
oder bereinigen Sie die ssh-Schlüssel im Falle eines Berechtigungsfehlers, wenn Sie Code in eines der Konten einfügen:
ssh-add -D
git config user.name ändert nur den Namen, den ich begebe. Ich kann immer noch nicht schieben. So habe ich es gelöst, und ich denke, es ist ein einfacher Weg für mich.
Generieren Sie einen SSH-Schlüssel unter dem gewünschten Benutzernamen auf dem Computer, den Sie verwenden möchten https://help.github.com/articles/connecting-to-github-with-ssh/
Fügen Sie diesen Schlüssel dem github-Benutzerkonto hinzu, zu dem Sie Push vornehmen möchten https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/
Wählen Sie die Option zum Klonen mit SSH
Sie können jetzt als Benutzer dieses Repo eingeben.
Wenn Sie https://desktop.github.com/ haben
Sie können dann zu Einstellungen (oder Optionen) -> Konten gehen
und dann abmelden und anmelden.
Wenn unter Windows und Benutzer Git für Windows und manager
für die Verwaltung der Anmeldeinformationen (aka Git-Credential-Manager-for-Windows
Link ) das Problem ist, gibt es keine einfache Möglichkeit, zwischen Benutzern zu wechseln, wenn Sie mit https
-Token zu GitHub über OAuth
wechseln.
Der Grund ist, dass das Token wie folgt gespeichert wird:
git:https://github.com
Personal Access Token
OAuth_Token
Variationen der URL in Internet Address
funktionieren nicht, zum Beispiel:
git:https://[email protected]
git:https://github.com/username
Die Lösung: namespaces. Dies finden Sie in den Details zur Konfiguration des Git-Credential-Manager-for-Windows
:
Ich zitiere daraus:
namespace
Legt den Namespace für gespeicherte Anmeldeinformationen fest.
Standardmäßig verwendet der GCM den Namensbereich 'git' für alle gespeicherten Anmeldeinformationen. Durch die Einstellung dieses Konfigurationswerts kann der global oder für jeden Host verwendete Namespace gesteuert werden.
git config --global credential.namespace name
Speichern Sie nun Ihre Anmeldeinformationen im Windows Credential Manager als:
git.username:https://github.com
Personal Access Token
OAuth_Token
Beachten Sie, dass wir folgende Änderungen vorgenommen haben: git
-> git.username
(wo Sie username
in Ihren tatsächlichen Benutzernamen oder aus Gründen dessen ändern, was Sie als eindeutige Kennung wünschen)
Führen Sie nun in dem Repository, in dem Sie den spezifischen Eintrag verwenden möchten, Folgendes aus:
git config credential.namespace git.username
(Wieder ... ersetzen Sie username
durch Ihren gewünschten Wert.)
Ihr .git/config
enthält jetzt:
[credential]
namespace = git.username
Et voilá! Die richtigen Anmeldeinformationen werden aus dem Windows-Anmeldeinformationsspeicher abgerufen.
Das ändert natürlich nicht, welcher Benutzer/welche E-Mail-Adresse verwendet wird. Dafür müssen Sie die üblichen user.name
und user.email
konfigurieren.
Die Benutzer-ID, bei der die Festschreibung erfolgt, wird in der Konfigurationsdatei gespeichert.
gehe zum Anfang des Repositorysvi .git/config
Ändern Sie die nach "[remote" Origin "] angegebene URL-Zeile, um die entsprechende Benutzer-ID zu erhalten
Sie können eine neue Remote-URL für den anderen Benutzernamen hinzufügen, indem Sie git remote add Origin-username https://[email protected]/repository_name.git
verwenden.
Wenn Sie danach git Push -u Origin-username master
drücken, werden Sie zur Eingabe des Kennworts aufgefordert.