Come posso eseguire il push al mio fork da un clone del repository originale?


124

Ho creato un fork (chiamiamolo myrepo) di un altro repository (chiamiamolo orirepo) su GitHub. Successivamente, ho clonato orirepo.

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

Ho modificato circa 20 file, poi ho messo in scena la mia modifica e fatto un commit

git add
git commit

Tuttavia, quando ho provato a spingere

git push

Ho ricevuto questo errore:

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

So di aver commesso un errore: avrei dovuto clonare la forchetta invece di orirepo, ma ormai è troppo tardi. Come potrei spingere al mio fork piuttosto che a origin/orirepo, a cui non ho accesso in scrittura?

Risposte:


188

Per impostazione predefinita, quando cloni un repository

  • che risiede a https://github.com/original/orirepo.git,
  • il cui ramo attuale si chiama master,

poi

  • la configurazione locale del clone risultante elenca solo un remoto chiamato origin, che è associato all'URL del repository che hai clonato;
  • il masterramo locale nel tuo clone è impostato per monitorare origin/master .

Pertanto, se non modifichi la configurazione del tuo clone, Git interpreta

git push

come

git push origin master:origin/master

In altre parole, git pushtenta di inviare il tuo masterramo locale al masterramo che risiede sul repository remoto (conosciuto dal tuo clone come origin). Tuttavia, non sei autorizzato a farlo, perché non hai accesso in scrittura a quel repository remoto.

Devi

  1. o ridefinisci il origintelecomando da associare al tuo fork, eseguendo

    git remote set-url origin https://github.com/RemiB/myrepo.git
    
  2. oppure, se vuoi preservare la definizione originale del origintelecomando, definisci un nuovo telecomando (chiamato myrepo, qui) che è associato al tuo fork:

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

    Quindi dovresti essere in grado di inviare il tuo masterramo locale al tuo fork eseguendo

    git push myrepo master
    

    E se vuoi dire a Git che git pushdovrebbe spingere a myrepoinvece che originda ora in poi, dovresti eseguire

    git push -u myrepo master
    

anziché.


´git push -u´ cambierà anche il comportamento predefinito di ´git pull´?
benroth

1
Sì, quindi invece di fare "push -u", dovresti usare l'opzione pushDefault: git config --add remote.origin.pushdefault myrepo e influenzerà solo il push e si applica a tutti i nuovi rami esistenti.
Marius K

1
Fatto git remote set-url origin http://github.com/myname/reponamee poi git push origin mybranch. Lavorato! Grazie!
Sviluppatore Marius Žilėnas

1
Se viene utilizzato Aggiungi telecomando, come influisce sul pull? Da dove viene? Come gestisce la futura fusione tra i 2 pronti contro termine?
Kok How Teh

1
@KokHowTeh L'aggiunta di un altro telecomando non influisce sul ramo remoto (se presente) tracciato da un ramo locale. Tuttavia, git push -u myrepo masterfa in modo che il tuo master locale inizi a monitorare myrepo/master. Se, dopo di ciò, corri git pullmentre sei su master, tirerai da myrepoe non più da origin.
jub0bs

18

Quindi, hai clonato il repo di qualcuno, hai apportato le modifiche e poi ti sei reso conto che non puoi eseguire il push in quel repo, ma puoi eseguire il push sul tuo fork. Quindi, sei andato avanti e hai biforcato il repository originale.

Tutto quello che devi fare è scambiare l'URL di origine nel tuo clone locale con l'URL del tuo repository biforcato.

Fai cosi

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

Dov'è https://github.com/fork/name.gitl'URL del tuo fork dal repository originale.

Dopodiché, basta

git push

e sarai in grado di inviare le modifiche al tuo fork :)


ha funzionato a meraviglia, grazie!
Rafael Ruales

7

Ok ho finalmente modificato il mio file di configurazione git:

$ nano .git/config

mutevole :

[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

per

[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

Poi,

$ git push

Ha funzionato come un fascino.

Oppure, grazie alla risposta di Thiago F Macedo :

git remote set-url origin https://yourusername@github.com/user/repo.git

-5

Dovresti prima clonare il repo biforcuto nel tuo account.

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

Hai assolutamente le autorizzazioni per eseguire il push a questo repository. Se vuoi inviare il tuo codice al repository originale, puoi inviare una richiesta pull.


Non stanno chiedendo di clonare la forcella. Per favore, leggi di nuovo la domanda.
Ahmad Awais,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.