Wie kann ich von einem Klon des ursprünglichen Repos auf meine Gabel drücken?

122

Ich habe einen Fork (nennen wir es myrepo) eines anderen Repositorys (nennen wir es orirepo) auf GitHub erstellt. Später habe ich geklont orirepo.

git clone https://github.com/original/orirepo.git

Ich habe ungefähr 20 Dateien geändert, dann meine Änderung inszeniert und ein Commit durchgeführt

git add
git commit

Als ich jedoch versuchte zu pushen

git push

Ich habe diesen Fehler erhalten:

remote: Permission to original/orirepo.git denied to mylogin.
fatal: unable to access 'https://github.com/original/orirepo.git/': The requested URL returned error: 403

Ich weiß, dass ich einen Fehler gemacht habe: Ich hätte lieber meine Gabel klonen sollen als orirepo, aber dafür ist es jetzt zu spät. Wie könnte ich auf meine Gabel drücken anstatt auf die origin/orirepo, auf die ich keinen Schreibzugriff habe?

Rémi Becheras
quelle

Antworten:

187

Standardmäßig, wenn Sie ein Repository klonen

  • das wohnt bei https://github.com/original/orirepo.git,
  • dessen aktueller Zweig heißt master,

dann

  • In der lokalen Konfiguration des resultierenden Klons wird nur eine aufgerufene Fernbedienung aufgelistet origin, die der URL des von Ihnen geklonten Repositorys zugeordnet ist.
  • Der lokale masterZweig in Ihrem Klon ist auf Verfolgung eingestellt origin/master .

Wenn Sie die Konfiguration Ihres Klons nicht ändern, interpretiert Git dies

git push

wie

git push origin master:origin/master

Mit anderen Worten, git pushVersuche, Ihre lokale masterNiederlassung an die zu verschiebenmaster Zweig zu verschieben, der sich im Remote-Repository befindet (bekannt unter Ihrem Klon als origin). Dies ist jedoch nicht zulässig, da Sie keinen Schreibzugriff auf dieses Remote-Repository haben.

Du brauchst

  1. Definieren Sie entweder die originFernbedienung neu, die Ihrer Gabel zugeordnet werden soll, indem Sie sie ausführen

    git remote set-url origin https://github.com/RemiB/myrepo.git
    
  2. Wenn Sie die ursprüngliche Definition der originFernbedienung beibehalten möchten , definieren Sie eine neue Fernbedienung (hier aufgerufen myrepo), die Ihrer Gabelung zugeordnet ist:

    git remote add myrepo https://github.com/RemiB/myrepo.git
    

    Dann sollten Sie in der Lage sein, Ihren lokalen masterZweig durch Ausführen an Ihre Gabel zu schieben

    git push myrepo master
    

    Und wenn Sie wollen Git sagen , dass git pushschieben sollte myrepostatt originvon nun an sollten Sie laufen

    git push -u myrepo master
    

stattdessen.

jub0bs
quelle
Wird ´git push -u´ auch das Standardverhalten von ´git pull´ ändern?
Benroth
1
Ja, also anstatt "push -u" zu verwenden, sollten Sie die pushDefault-Option verwenden: git config --add remote.origin.pushdefault myrepo. Dies wirkt sich nur auf das Pushing aus und gilt für alle vorhandenen neuen Zweige.
Marius K
1
Hat git remote set-url origin http://github.com/myname/reponameund dann git push origin mybranch. Hat funktioniert! Danke dir!
Entwickler Marius Žilėnas
1
Wie wirkt sich das Hinzufügen einer Fernbedienung auf das Ziehen aus? Woher zieht es? Wie geht es mit zukünftigen Zusammenführungen zwischen den beiden Repos um?
Kok, wie der
1
@KokHowTeh Das Hinzufügen einer weiteren Fernbedienung hat keinen Einfluss darauf, welche Remote-Verzweigung (falls vorhanden) eine lokale Verzweigung verfolgt. Allerdings git push -u myrepo mastermacht die lokale Master Start - Tracking myrepo/master. Wenn Sie danach git pullauf dem Master laufen , ziehen Sie von myrepound nicht mehr von origin.
Jub0bs
17

Sie haben also das Repo von jemandem geklont, die Änderungen vorgenommen, und dann festgestellt, dass Sie nicht auf dieses Repo drücken können, sondern auf Ihre eigene Gabel. Also haben Sie das ursprüngliche Repo gegabelt.

Sie müssen lediglich die Ursprungs-URL in Ihrem lokalen Klon mit der URL Ihres gespaltenen Repos austauschen.

Mach es so

git remote set-url origin https://github.com/fork/name.git

Wo https://github.com/fork/name.gitist die URL Ihrer Gabel aus dem Original-Repo?

Danach einfach

git push

und du wirst in der Lage sein, deine Änderungen an deine Gabel zu übertragen :)

Ahmad Awais
quelle
7

Okay, ich habe endlich meine Git-Konfigurationsdatei bearbeitet:

$ nano .git/config

Ändern :

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/<origin-project>/<origin-repo>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

zu

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/<mylogin>/<myrepo>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

Dann,

$ git push

Lief wie am Schnürchen.

Oder dank der Antwort von Thiago F Macedo :

git remote set-url origin https://[email protected]/user/repo.git
Rémi Becheras
quelle
-5

Sie sollten zuerst das gegabelte Repo in Ihrem Konto klonen.

git clone https://github.com/your_account/repo.git

Sie haben absolut die Berechtigung, auf dieses Repo zu pushen. Wenn Sie Ihren Code in das ursprüngliche Repo verschieben möchten, können Sie eine Pull-Anfrage stellen.

LeonF
quelle
Sie bitten nicht, die Gabel zu klonen. Bitte lesen Sie die Frage noch einmal.
Ahmad Awais