2014-08-28 11 views
63

Ho creato un fork (chiamiamolo myrepo) di un altro repository (chiamiamolo orirepo) su GitHub. Più tardi, ho clonato orirepo.Come posso spingere alla mia forcella da un clone del repository originale?

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

ho modificato circa 20 file, poi ho messo in scena il mio cambiamento e ha fatto un commit

git add 
git commit 

Tuttavia, quando ho provato a spingere

git push 

ho ottenuto 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 fatto un errore: Avrei dovuto clonare la mia forchetta anziché lo orirepo, ma ora è troppo tardi. Come posso inviare push al fork invece che a origin/orirepo, a cui non ho accesso in scrittura?

risposta

89

Per impostazione predefinita, quando si clona un repository

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

quindi

  • la configurazione locale del clone risultante elenca un solo telefono chiamato origin, associato all'URL del repository clonato;
  • il ramo locale master nel clone è impostato su branoorigin/master.

Pertanto, se non si modifica la configurazione del vostro clone, Git interpreta

git push 

come

git push origin master:origin/master 

In altre parole, git push tentativi di spingere il vostro master filiale locale di il ramo master che si trova nel repository remoto (noto come clonome come origin). Tuttavia, non ti è permesso farlo, perché non hai accesso in scrittura a quel repository remoto.

È necessario

  1. sia ridefinire il origin telecomando per essere associato con la forchetta, eseguendo

    git remote set-url origin https://github.com/RemiB/myrepo.git 
    
  2. o, se si desidera conservare la definizione originale del origin remota , definire un nuovo telecomando (denominato myrepo, qui) associato alla forcella:

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

    allora si dovrebbe essere in grado di spingere il vostro master filiale locale per la forcella eseguendo

    git push myrepo master 
    

    E se si vuole raccontare Git che git push dovrebbe spingere per myrepo invece di origin da ora in poi, è necessario eseguire

    git push -u myrepo master 
    

invece.

+0

sarà'git spingere -u' cambiarne anche il comportamento predefinito di pull''git ? – benroth

+0

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

+1

Ha 'git origine set-url remoto http: // github.com/myname/reponame' e quindi' git push origin mybranch'. Lavorato! Grazie! – Willmore

4

Ok ho finalmente modificato il mio file di configurazione git:

$ nano .git/config 

cambiando:

[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 

a

[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 Thiago F Macedo answer:

git remote set-url origin https://[email protected]/user/repo.git 
-4

Dovresti prima clonare il repository a forcella nel tuo account.

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

È assolutamente necessario disporre delle autorizzazioni per accedere a questo repository. Se si desidera inviare il codice al repository originale, è possibile inviare una richiesta di pull.

+0

Non stanno chiedendo di clonare la forcella. Gentilmente, leggi di nuovo la domanda. –

+0

@AhmadAwais Citazione dal poster: "So di aver fatto un errore: avrei dovuto clonare la mia forchetta piuttosto che l'orirepo, ma ora è troppo tardi. Come potrei spingere al mio fork piuttosto che all'origine/orirepo, che non hai accesso in scrittura? ". Ho fatto notare il problema. DOVRAI LEGGERE LA DOMANDA. – LeonF

6

Quindi, hai clonato il repository di qualcuno che ha apportato le modifiche e poi ti sei reso conto che non puoi spingere a quel repository, ma puoi spingere al tuo fork. Quindi, sei andato avanti e biforcato il repository originale.

Tutto ciò che dovete fare è scambiare l'URL di origine nel vostro clone locale con l'URL del repository biforcato.

fare in questo modo

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

Dove https://github.com/fork/name.git è l'URL della forcella dalla repo originale.

Dopo di che, basta

git push 

e sarete in grado di spingere le modifiche al tuo forchetta :)

+0

La risposta che ho accettato lo dico già, e menziono anche questa soluzione alla fine della mia risposta ... Mi dispiace ma la tua risposta non dice nulla di nuovo ... –

+4

La mia risposta è più pertinente. A volte le persone hanno solo bisogno di una risposta al punto. Per una versione più dettagliata possono sempre cercare la tua risposta. Sento che non c'è bisogno di spiegazioni. –

+0

Ok, il tuo pensiero mi convince. Doveva sorvolare la tua risposta. Grazie Ahmad. –

Problemi correlati