2014-08-28 3 views
63

GitHub에서 다른 저장소 (예 : orirepo)의 포크 (myrepo)를 만들었습니다. 나중에 나는 orirepo을 복제했다.원본 저장소의 복제본에서 내 포크를 어떻게 푸시 할 수 있습니까?

:

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

나는 그때 내가이 오류가 발생했습니다

git push 

을 밀어하려고 할 때, 그러나

git add 
git commit 

커밋 내 변화를 개최하고 만든, 약 20 파일을 수정

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 

내가 실수 한 것을 알고 있습니다. orirepo보다는 포크를 복제해야했지만 지금은 너무 늦었습니다. 쓰기 권한이없는 origin/orirepo이 아닌 내 포크로 어떻게 푸시 할 수 있습니까?

답변

89

, 당신은 저장소를 복제 할 때 https://github.com/original/orirepo.git에있는

  • , 누구의 현재 지점 master라고
  • ,

다음

  • 복제본의 로컬 구성에는 복제 한 저장소의 URL과 연결된 origin이라는 리모컨이 하나만 나열됩니다.
  • 로컬 master 브랜치는 트랙origin/master으로 설정됩니다.당신이 당신의 클론의 설정을 수정하지 않는 경우

따라서, 힘내에 해당 지역의 master 분기를 밀어

git push 

git push origin master:origin/master 

로, git push 시도를 해석 원격 저장소에있는 master 브랜치 (복제본에 origin으로 알려짐). 그러나 원격 저장소에 대한 쓰기 권한이 없기 때문에이 작업을 수행 할 수 없습니다. 당신이 원격 origin의 원래 정의를 보존하려는 경우

당신은

git remote set-url origin https://github.com/RemiB/myrepo.git 
  • 이상을 실행하여, 포크와 연관 될 origin 리모컨을 재정의

    1. 중 하나 필요 포크와 연결된 새 원격 (myrepo)을 정의하십시오.

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

      은 그럼 당신은

      git push myrepo master 
      

      를 실행하여 포크로 지역 master 분기를 밀어 수 있어야합니다 그리고 당신은 git push 지금부터 myrepo 대신 origin으로 추진해야 망할 놈의 말하려면, 당신은

      를 실행해야합니다 대신
      git push -u myrepo master 
      

    .

  • +0

    도 'git pull'의 기본 동작을 변경 -u' 밀어 'git됩니다에 변경 내용을 밀어 수 있습니다 ? – benroth

    +0

    그렇습니다. 따라서 "push -u"를 수행하는 대신 pushDefault 옵션을 사용해야합니다. git config --add remote.origin.pushdefault myrepo 푸시에 영향을주고 기존의 모든 새로운 가지. –

    +1

    'git remote set-url origin http : // github.com/myname/reponame'을 실행하고'git push origin mybranch'을 실행했습니다. 일했다! 고맙습니다! – Willmore

    4

    나는 결국 내 자식 config 파일을 편집 좋아요 :

    $ nano .git/config 
    

    변화 :

    [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 
    

    그런

    [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 
    

    에,

    $ git push 
    

    매력처럼 작동했습니다. Thiago F Macedo answer

    또는 감사 : 기본적으로

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

    먼저 계정에서 분기 된 레포를 복제해야합니다.

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

    이 repo로 푸시 할 권한이 반드시 있어야합니다. 코드를 원본 repo로 푸시하려면 풀 요청을 발행 할 수 있습니다.

    +0

    그들은 포크 복제를 요구하지 않습니다. 친절하게 질문을 다시 읽으십시오. –

    +0

    @AhmadAwais 포스터에서 인용 : "나는 실수를 저질렀다. 나는 오리 레포보다 포크를 복제해야했지만, 지금은 너무 늦었다. 어떻게 오리진이나 오리레포가 아닌 내 포크로 갈 수 있을까? 에 대한 쓰기 권한이 없습니까? " 나는 그 문제를 지적했다. 질문을 다시 읽어야합니다. – LeonF

    6

    그래서 누군가의 repo를 복제하여 변경 한 다음 해당 repo로 푸시 할 수 없다는 것을 깨달았지만 자신 만의 포크로 푸시 할 수 있습니다. 그래서, 당신은 앞서 가서 원래의 repo를 갈랐습니다.

    로컬 복제본의 원본 URL을 분기 된 repo의 URL로 바꾸면됩니다.

    https://github.com/fork/name.git 원래의 repo에서 포크의 URL이

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

    처럼 마십시오.

    그 후

    , 단지

    git push 
    

    당신은 당신의 포크 :

    +0

    내가 받아 들인 대답은 이미 그것을 말하고, 나는 또한 내 대답 끝에이 해결책을 언급한다 ... 미안하지만 대답은 새롭지 않다. –

    +4

    내 대답이 더 중요하다. 때로는 사람들은 꼭 대답해야합니다. 더 자세한 버전을 보려면 항상 귀하의 답변을 찾을 수 있습니다. 나는 설명 할 필요가 없다고 느낀다. –

    +0

    좋아, 너의 생각은 나를 설득시킨다. 당신의 대답을 upvote하기 위해 맹세했다. 감사합니다 아마드. –

    관련 문제