읽기 전용 git 클론을 github에서 forked로 변환하는 방법


79

가끔이 문제가 발생합니다.

몇 가지 문제가 발생했기 때문에 레일의 소스 코드를 읽기 위해 다음을 수행했다고 가정 해 보겠습니다.

git clone git://github.com/rails/rails.git

연구하는 동안 나는 무언가를 테스트했고 이제 Rails 핵심 팀이 살펴 보길 원하는 수정 사항이 있습니다. 변경 사항을 분기 된 레일 버전으로 푸시하려면 어떻게해야합니까?

복제 할 때 포크 버전이 아니라 읽기 전용 버전을 복제 한 것을 기억하십시오.

나는 포크에 반대하는 것이 아닙니다. 가끔은 그냥 찾아보고 뭔가를 추가하고 싶을 때가 있습니다.


제 답변이 귀하에게 적합한 지 또는 여전히 더 많은 정보가 필요한지 확인하고 싶습니다. 추가 설명이나 설명이 필요한 경우 알려 주시면 도와 드리겠습니다. 그렇지 않은 경우 질문에 적절하게 답변했음을 나타내는 답변을 수락 할 수 있습니다.
Brian Campbell

답변:


112

저장소를 복제하면 복제 한 저장소 origin를 참조 하는 원격 호출 이 자동으로 설정됩니다 . 이것은 이제 업스트림 Rails 프로젝트를 가리키고 있지만, 필요한 것은 푸시 할 수있는 자체 포크를 생성 한 다음 푸시 할 수 있도록 그곳을 가리키는 리모트를 설정하는 것입니다.

첫 번째 단계는 업스트림 GitHub 프로젝트 페이지에서 "포크"버튼을 클릭하는 것입니다 ( 포킹에 대한 GitHub 지침의 그림 ).

GitHub 포크 버튼

그런 다음 해당 저장소의 URL을 찾아 복사하십시오. 읽기 및 쓰기 액세스 권한이있는 SSH URL을 사용해야합니다. git@github.com:nadal/rails.git사용자 이름이라고 가정하면 다음과 같아야합니다 nadal.

이제 Git이 원격 저장소를 추적 할 수 있도록 원격 저장소를 만들 수 있으며 액세스 권한에 따라 가져 오거나 푸시 할 수 있습니다. origin푸시 할 항목 (설정 한 사람 수)으로 교체 하거나 origin업스트림을 가리 키도록 두고 대신 새 리모컨을 만들 수 있습니다. 첫 번째 설정을 수행하는 방법을 보여 드리겠습니다. 두 번째는 쉽게 알아낼 수 있어야합니다.

originGitHub에서 포크를 가리 키도록 변경하려면 업스트림 브랜치를 어딘가에 유지하고 싶을 것이므로 이름을 upstream다음 과 같이 변경하십시오 .

git remote rename origin upstream

이제 포크를 가리키는 새 원격을 만듭니다.

git remote add -f origin git@github.com:nadal/rails.git

이제 새 포크로 푸시 할 수 있습니다.

git push origin master

GitHub에 푸시 한 변경 사항에 만족하고 Rails 팀의 누군가가이를 보길 원하면 두 가지 선택이 있습니다. 하나는 GitHub를 사용하여 pull 요청보내는 것입니다 . 그 방법은 문서를 참조하십시오. 그러나 작은 패치가 하나 또는 몇 개만있는 경우 Rails 팀은 Lighthouse 티켓만들고 패치를 첨부 하는 것을 선호합니다 . 자세한 내용은 Rails기여 하는 방법에 대한 지침 을 참조하십시오.

편집 여기에 무슨 일이 일어나고 있는지 나타내는 다이어그램이 있습니다. 당신이 한 일은 단순히 upstream rails repo를 복제하는 것입니다. 그래서 지금 당신을 의미 자신의 컴퓨터에 자신의 repo이 git://github.com/rails/rails.git같은 origin:

Github : git : //github.com/rails/rails.git
                    ^
                    |
리모컨 : 원산지
                    |
기계 : 레일 /

다음은 포크 한 다음 포크를 복제하면 얻을 수있는 것입니다.

Github : git : //github.com/rails/rails.git <-git@github.com : nadal / rails.git
                                                           ^
                                                           |
리모컨 : 원산지
                                                           |
기계 : 레일 /

내 지침을 따르면 다음과 같은 결과를 얻을 수 있습니다.

Github : git : //github.com/rails/rails.git <-git@github.com : nadal / rails.git
                        ^ ^
                        | |
리모컨 : 업스트림 출처
                        | |
컴퓨터 : \ ------------------------------- rails /

이는 포크로 얻는 버전과 비슷하지만, upstream원격이 있으므로 공식 변경 사항을 추적하고 코드에 병합 할 수 있습니다 (포크 버전을 만든 경우 upstream원격을 다음과 같이 추가 할 수 있습니다. 잘).


원본 포스터가 말했듯이 가끔 원본에 대한 링크없이 일부 작업을 저장하기를 원할 경우 실제로 포크를 원하지 않을 수 있습니다.
Adam Dymitruk 2010

1
@adymitruk 아니요, OP는 가끔 분기하지 않고 업스트림 저장소를 복제하지만 나중에 다시 기여하고 싶다고 언급했습니다. 그는 특히 자신의 변경 사항을 Rails의 포크 버전으로 푸시하고 싶다고 말했습니다. 그는 원본에 대한 링크없이 작업을 저장하고 싶다는 말을하지 않았습니다.
Brian Campbell

그는 실제 프로젝트에 기여하고 싶을 수 있습니다. 만약 그가 포크하고 싶지 않다면 ...
Adam Dymitruk 2010

답변에 감사 드리며 지연되어 죄송합니다. 내가 언급했듯이 나는 레일을 포크하지 않았습니다. 레일 복제품이 있습니다. 그러나 귀하의 대답은 내가 먼저 레일을 분기했다고 가정합니다. 내가 맞았나?
Nick Vanderbilt

4
@Nadal 내 대답은 이미 포크를 만들었다 고 가정하지 않습니다. 내 대답은 방금 저장소를 복제 한 상황을 로컬 저장소의 변경 사항을 포크로 푸시 할 수있는 상황으로 변환하는 방법을 설명합니다. GitHub에서 리포지토리를 포크하면 푸시 할 수있는 서버에 복사본이 생성됩니다. 일단 당신이 그것을 완료하면, 내 지침은 당신이 만든 로컬 저장소를 가리키는 방법을 보여줍니다. 지금은 공식 레일 저장소를 가리키고 대신 포크를 가리 킵니다. 무슨 일이 일어나고 있는지 나타내는 다이어그램을 추가했습니다. 도움이 되었기를 바랍니다. 추가 질문이 있으면 알려주세요.
Brian Campbell

3

복제 모드에서 분기 모드로 전환하는 매우 쉬운 방법 hubhttp://hub.github.com/ 의 래퍼를 사용하는 것 입니다.

이것이 설치되면 실행하십시오

hub fork

읽기 전용 복제본 내에서.


잘 작동합니다. 포크는 github 사용자 이름과 동일한 원격 이름으로 생성됩니다.
Zitrax 2015 년

1

그것은 중요하지 않습니다. 원하는 경우 포크되지 않은 저장소를 지정하여 다른 원격을 추가 할 수 있습니다. 변경 사항을 적용하십시오.


다른 리모컨을 어떻게 추가합니까? 죄송합니다. git world의 초보자.
Nick Vanderbilt

1
나중에 분기 한 다음 분기 된 저장소로 푸시 할 수 있습니다. 아직 분기하지 않은 경우를 대비하여. 분기 차종 당신에게 저장소의 자신의 "복사"당신이있는 거 관심 인치
아담 Dymitruk

지금은 github에서 새 저장소를 만들 수 있습니다. rails repo에서 복제 한 것에 원격으로 추가하고 새 저장소로만 푸시하십시오. 나는 이것이 당신이 추구하는 것이라고 생각합니다. 포크가 필요하지 않습니다.
Adam Dymitruk 2010

1
git remote add myrepo git : //github.com/myid/mynotforkedrepo.git
Adam Dymitruk 2010

아직 github (또는 다른 곳)에 저장소를 만들었습니까?
Adam Dymitruk

0

또는 포크를 원하지 않는 경우 유지 관리 팀에 따라 패치를 만들어 제출할 수 있습니다. 일반적으로 다른 주석에 설명 된대로 github에서 분기하거나 자신의 git repo에서 분기하여 리포지토리를 사용할 수 있도록하고 원래 리포지토리의 관리자에게 병합 할 리포지토리 및 브랜치에 대한 정보를 제공합니다.


1
나는 단순한 포크이기 때문에 왜 어쨌든 포크를 원하지 않는지 이해할 수 없습니다! 프로젝트의 완전히 새로운 버전이 아닙니다. 단지 여러분이 바라는 소스 코드의 복사본입니다. 패치 시리즈와 같습니다.
대안

1
그 사람은 Github 계정이 없지만 여전히 프로젝트에 기여하고 싶어 할 수 있습니다. 그들은 프로젝트를 복제하고, 편집하고, 포함을 위해 원래 프로젝트에 패치 또는 분기를 제출할 수 있습니다. 그러나 가능 하다면 포크하지 않을 실제 이유 가 없습니다 .
Svenito 2010
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.