원본 저장소의 복제본에서 포크로 푸시하려면 어떻게해야합니까?


123

GitHub myrepo에서 다른 저장소 (라고 부르겠습니다) 의 포크 (라고 부르겠습니다)를 만들었습니다 orirepo. 나중에 orirepo.

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

약 20 개의 파일을 수정 한 다음 변경 사항을 준비하고 커밋했습니다.

git add
git commit

그러나 내가 밀려 고 할 때

git push

이 오류가 발생했습니다.

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쓰기 액세스 권한이없는 대신 포크로 푸시하려면 어떻게 해야합니까?

답변:


187

기본적으로 저장소를 복제 할 때

  • 에있는 https://github.com/original/orirepo.git,
  • 그의 현재 브랜치가 호출됩니다 master,

그때

  • 결과 클론의 로컬 구성에는 복제 한 origin저장소의 URL과 연결된 라는 원격 하나만 나열됩니다 .
  • master클론 의 로컬 브랜치는 track 으로 설정되어 origin/master있습니다.

따라서 클론의 구성을 수정하지 않으면 Git은

git push

같이

git push origin master:origin/master

즉, git push로컬 master브랜치를 master원격 저장소에있는 브랜치 (복제본에서라고 함 origin) 로 푸시하려고합니다 . 그러나 원격 저장소에 대한 쓰기 액세스 권한이 없기 때문에 그렇게 할 수 없습니다.

당신은

  1. 다음 origin을 실행하여 포크와 연결할 리모컨을 재정의하십시오.

    git remote set-url origin https://github.com/RemiB/myrepo.git
    
  2. 또는 origin원격 의 원래 정의를 유지하려면 myrepo포크와 관련된 새 원격 ( 여기서는 라고 함 )을 정의 하십시오.

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

    그런 다음 다음을 master실행 하여 로컬 브랜치를 포크 로 푸시 할 수 있습니다.

    git push myrepo master
    

    당신이 망할 놈의 말 싶다면 git push으로 추진해야한다 myrepo대신 origin에 지금부터를, 당신은 실행해야

    git push -u myrepo master
    

대신.


´git push -u´도 ´git pull´의 기본 동작을 변경합니까?
benroth

1
예, 그렇습니다. "push -u"대신 pushDefault 옵션을 사용해야합니다. git config --add remote.origin.pushdefault myrepo 그러면 푸시에만 영향을 미치며 기존의 모든 새 분기에 적용됩니다.
Marius K

1
나요 git remote set-url origin http://github.com/myname/reponamegit push origin mybranch. 작동했습니다! 감사합니다!
개발자 Marius Žilėnas

1
원격 추가를 사용하면 풀에 어떤 영향을 줍니까? 어디에서 가져 오나요? 두 리포지토리 간의 향후 병합을 어떻게 처리합니까?
Kok How Teh

1
@KokHowTeh 다른 리모트를 추가해도 로컬 브랜치가 추적하는 리모트 브랜치 (있는 경우)에는 영향을 미치지 않습니다. 그러나 git push -u myrepo master로컬 마스터가 추적을 시작하도록 myrepo/master합니다. 그 후에 git pull마스터에서 실행 하면에서 가져 myrepo오고 더 이상에서 가져 오지 않습니다 origin.
jub0bs

18

따라서 누군가의 리포지토리를 복제하여 변경 한 다음 해당 리포지토리로 푸시 할 수 없지만 자신의 포크로 푸시 할 수 있음을 깨달았습니다. 그래서, 당신은 계속해서 원본 저장소를 포크했습니다.

로컬 복제본의 원본 URL을 분기 된 저장소의 URL로 교체하기 만하면됩니다.

이렇게 해

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

https://github.com/fork/name.git원래 저장소의 포크 URL은 어디에 있습니까 ?

그 후

git push

변경 사항을 포크로 푸시 할 수 있습니다. :)


매력처럼 작동했습니다, 감사합니다!
Rafael Ruales

7

좋아 마침내 내 자식 구성 파일을 편집했습니다.

$ 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 답변에 감사드립니다 .

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

-5

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

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

이 저장소에 푸시 할 수있는 권한이 절대적으로 있습니다. 코드를 원래 리포지토리로 푸시하려면 풀 요청을 발행 할 수 있습니다.


그들은 포크 복제를 요구하지 않습니다. 친절하게도 질문을 다시 읽으십시오.
Ahmad Awais
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.