2014-08-28 11 views
63

Utworzono widelec (nazwijmy go myrepo) innego repozytorium (nazwijmy to orirepo) na GitHub. Później sklonowałem orirepo.Jak mogę popchnąć do mojego widelca od klona oryginalnego repo?

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

I zmodyfikowane około 20 plików, a potem wystawił moje zmiany i popełnił popełnić

git add 
git commit 

Jednak, kiedy próbowała wcisnąć

git push 

mam ten błąd:

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 

Wiem, że popełniłem błąd: Powinienem był raczej sklonować widelec niż orirepo, ale teraz jest już za późno. Jak mogę popchnąć do mojego widelca zamiast do origin/orirepo, do którego nie mam prawa zapisu?

Odpowiedz

89

Domyślnie podczas klonowania repozytorium

  • który rezyduje w https://github.com/original/orirepo.git,
  • którego obecny oddział nazywa master,

następnie

  • lokalna konfiguracja wynikowego klonowania list tylko jeden zdalny o nazwie origin, który jest powiązany z adresem URL repozytorium, które sklonowałeś;
  • Lokalna gałąź master w klonie jest ustawiona na ścieżkęorigin/master.

Dlatego też, jeśli nie modyfikować config swojego klona, ​​Git interpretuje

git push 

jak

git push origin master:origin/master 

Innymi słowy, git push prób Push lokalnej master oddział gałąź master, która znajduje się na zdalnym repozytorium (znana jako klon jako origin). Jednak nie możesz tego zrobić, ponieważ nie masz uprawnień do zapisu do tego zdalnego repozytorium.

Trzeba

  1. albo przedefiniować origin pilota wiązać się z widelca, uruchamiając

    git remote set-url origin https://github.com/RemiB/myrepo.git 
    
  2. lub, jeśli chcesz zachować oryginalną definicję origin zdalnego , zdefiniuj nowy pilot (zwany myrepo, tutaj), który jest powiązany z twoim widelcem:

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

    Następnie powinieneś być w stanie wcisnąć się z lokalnym master oddział do widelca uruchamiając

    git push myrepo master 
    

    A jeśli chcesz powiedzieć Git że git push powinien pchać do myrepo zamiast origin od teraz należy uruchomić

    git push -u myrepo master 
    

zamiast tego.

+0

będzie'git popchnąć -u' także zmienić domyślne zachowanie'git pull' ? – benroth

+0

Tak to będzie, więc zamiast robić „push -u”, należy użyć opcji pushDefault: git config --add remote.origin.pushdefault myrepo i będzie to miało wpływ tylko pchanie, i odnosi się do wszystkich istniejących nowy gałęzie. –

+1

Zrobiłem 'git zdalny set-url origin http: // github.com/myname/reponame', a następnie' git push origin mybranch'. Pracował! Dziękuję Ci! – Willmore

4

Ok I wreszcie edytowane mój plik git config:

$ nano .git/config 

zmienia:

[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 

do

[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 

Następnie

$ git push 

Pracował jak urok.

Albo dzięki Thiago F Macedo answer:

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

Najpierw należy sklonować rozwidlone repo na swoim koncie.

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

Absolutnie masz uprawnienia do przekazania do tego repozytorium. Jeśli chcesz przenieść swój kod do oryginalnego repo, możesz wysłać żądanie ściągnięcia.

+0

Nie proszą o sklonowanie widelca. Uprzejmie, przeczytaj ponownie pytanie. –

+0

@AhmadAwais Cytat z plakatu: "Wiem, że popełniłem błąd: powinienem był sklonować moje widelce zamiast orirepo, ale teraz jest już za późno. Jak mogę popchnąć do mojego widelca zamiast do pochodzenia/orirepo, który nie masz uprawnień do zapisu? ". Wskazałem na problem. POWINIEN PRZECZYTAĆ PYTANIE ZNOWU. – LeonF

6

Sklonowałeś więc czyjś repo dokonane zmiany, a następnie uświadomiłem sobie, że nie można przejść do tego repo, ale można popchnąć do własnego widelca. Więc poszłaś naprzód i rozwidlałeś oryginalne repozytorium.

Wszystko, co musisz zrobić, to zamienić pierwotny adres URL w lokalnym klonie na URL swojego rozwidlonego repo.

to zrobić następująco

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

Gdzie https://github.com/fork/name.git jest URL widelca z oryginalnego repo.

Następnie wystarczy

git push 

i będziesz w stanie wcisnąć swoje zmiany do widelca :)

+0

Odpowiedź, którą przyjąłem, już to stwierdzam, i wspominam o tym rozwiązaniu na końcu mojej własnej odpowiedzi ... Przykro mi, ale twoja odpowiedź nic nowego nie mówi .. –

+4

Moja odpowiedź jest bardziej konkretna. Czasami ludzie po prostu potrzebują do rozwiązania problemu. Aby uzyskać bardziej szczegółową wersję, zawsze mogą szukać odpowiedzi. Czuję, że nie ma potrzeby wyjaśniania. –

+0

Ok, twoja myśl mnie przekonuje. Powinien upominać twoją odpowiedź. Dziękuję Ahmad. –

Powiązane problemy