GitHub : 공개 저장소 포크를 비공개로 만드는 방법은 무엇입니까?


247

공용 저장소를 포크로 만들 수 있지만 포크를 개인용으로 만들려면 어떻게해야합니까? 개인 리포지토리를 지원하기위한 구독이 있습니다.

답변:


394

대답은 정확하지만 공개 리포지토리와 포크 사이에서 코드를 동기화하는 방법은 언급하지 않았습니다.

전체 워크 플로우는 다음과 같습니다 ( React Native 를 오픈 소싱하기 전에이 작업을 수행함 ).


먼저 다른 사람들이 말한 것처럼 repo를 복제하십시오 (자세한 내용은 여기 참조 ).

Github UIprivate-repo 를 통해 새로운 리포지토리 (호출하자 )를 만듭니다 . 그때:

git clone --bare https://github.com/exampleuser/public-repo.git
cd public-repo.git
git push --mirror https://github.com/yourname/private-repo.git
cd ..
rm -rf public-repo.git

개인 저장소를 복제하여 작업 할 수 있습니다.

git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master

공개 리포지토리에서 새로운 인기를 얻으려면 :

cd private-repo
git remote add public https://github.com/exampleuser/public-repo.git
git pull public master # Creates a merge commit
git push origin master

멋진 비공개 리포지토리에 공개 리포지토리의 최신 코드와 변경 사항이 추가되었습니다.


마지막으로 끌어 오기 요청 개인 저장소-> 공용 저장소를 작성하려면 다음을 수행하십시오.

GitHub UI를 사용하여 공개 리포지토리 포크 (공개 리포지토리 페이지 오른쪽 상단에있는 작은 "포크"단추)를 만듭니다. 그때:

git clone https://github.com/yourname/the-fork.git
cd the-fork
git remote add private_repo_yourname https://github.com/yourname/private-repo.git
git checkout -b pull_request_yourname
git pull private_repo_yourname master
git push origin pull_request_yourname

이제 여기에 설명 된대로 Github UI를 통해 공개 리포지토리에 대한 풀 요청을 만들 수 있습니다 .

프로젝트 소유자가 풀 요청을 검토 한 후 병합 할 수 있습니다.

물론 전체 프로세스를 반복 할 수 있습니다 (리모컨을 추가하는 단계는 생략).


2
빈 개인 저장소를 일반 저장소의 일반 복제본에 새 리모컨으로 추가 한 다음 원격으로 푸시 할 수없는 이유는 무엇입니까? 차이점은 무엇입니까?
Falko Menge

@ FalkoMenge 나는 같은 질문이 있습니다. git-scm.com/docs/git-clone을 읽으면 정상적인 것처럼 들리 므로git clone 원격 추적 분기를 설정하고 복제 된 저장소의 다른 구성은 실제로 원하지 않습니다. --bare clone은 .git dir을 원격에서 그대로 복사합니다.
bennlich

1
개인 커밋 이력을 퍼블릭 브랜치로 푸시합니까?
Sukhjinder Singh

1
@Sukhjinder Singh 예, 마지막 단계는 개인 커밋 기록을 공개 리포지토리로 푸시합니다. 원하지 않으면 커밋을 공개 리포지토리에 병합 할 때 커밋을 스쿼시하고 모든 변경 사항으로 단일 커밋을 푸시 할 수 있습니다. 예를 들어 stackoverflow.com/questions/5308816/how-to-use-git-merge-squash
Martin Konicek

1
개인 저장소를 복제 한 다음 변경 한 다음 밀어 넣는 단계를 거쳐야했습니다. 내가 만든 모든 변경 사항은 git에 의해 눈에 띄지 않았습니다. git status내가 변경 한 내용에 관계없이 작업 트리를 최신 상태로 유지합니다. 결과적으로 나는 커밋하고 밀어 넣을 수 없습니다. 나는 이것을 시도하기 위해 2 번 더 만든 새로운 개인 저장소를 삭제했지만이 같은 문제가 계속 발생했습니다. 어떤 제안?

92

이제 옵션이 하나 더 있습니다 (2015 년 1 월)

  1. 새로운 개인 저장소 만들기
  2. 빈 저장소 화면에는 "가져 오기"옵션 / 버튼이 있습니다 여기에 이미지 설명을 입력하십시오
  3. 그것을 클릭하고 기존 github repo url을 넣으십시오 github 옵션 언급은 없지만 github repos에서도 작동합니다. 여기에 이미지 설명을 입력하십시오
  4. 끝난

19
조금 다르지만 작동합니다. (2015 년 8 월에 시도했습니다). 가져 오기 옵션 / 버튼을 찾지 못했기 때문에 Google에서 가져 와서이 URL로 끝났습니다. import.github.com/new 여기에서 기존 github URL을 입력하고 확인 버튼을 클릭 할 수 있습니다 . 확인되면 새 리포지토리 이름을 입력하고 개인 버튼을 클릭 한 다음 가져 오기 시작
Shiva

2
@MattvanAndel은 원래 답변이 아니라 주석이 정확하다는 것을 의미한다고 생각합니다. 나도 시바의 의견을 따랐다. 로컬 개인 저장소를 먼저 작성해서는 안됩니다!
David H

이런 식으로 개인 "포크"를 만들어 다시 공용 포크로 만들고 싶다면 어떻게해야합니까?
Anders Lindén

2
@Shiva 댓글로 답변을하시면 투표하겠습니다.
bebbi

36

현재 답변은 약간 구식이므로 명확성을 기합니다.

짧은 대답은 다음과 같습니다.

  1. 공개 리포지토리 의 베어 클론 을 수행하십시오.
  2. 새로운 개인 계정을 만듭니다.
  3. 새로운 개인 에게 거울 밀기 .

이것은 GitHub에 문서화되어 있습니다 : duplicating-a-repository


4
업스트림 변경 사항을 가져 오는 방법이 있습니까? 이것은 자유 라이센스가있는 리포지토리에 중요합니다. 리포지토리를 비공개로 만들었지 만 여전히 업스트림 변경 사항을 병합하고 싶습니다.
amarprabhu

2
예. 다른 리포지를 새 (추적) 리모컨 (예 : 'other-repo')으로 추가 한 다음 주기적으로 변경 내용을 가져 와서 병합 할 수 있어야합니다 (예 : 'git merge other-repo / stable').
stefano

26

당신은 레포를 복제해야합니다

이 문서를 볼 수 있습니다 (github에서)

분기하지 않고 리포지토리의 복제본을 만들려면 원래 리포지토리에 대해 특수 복제 명령을 실행하고 새 복제본을 미러 푸시해야합니다.

다음과 같은 경우 exampleuser / new-repository 또는 exampleuser / mirrored와 같이 푸시하려는 리포지토리가 GitHub에 이미 존재해야합니다. 자세한 정보는 "새 저장소 작성"을 참조하십시오.

리포지토리 미러링

정확하게 복제하려면 베어 클론과 미러 푸시를 모두 수행해야합니다.

명령 행을 열고 다음 명령을 입력하십시오.

$ git clone --bare https://github.com/exampleuser/old-repository.git
# Make a bare clone of the repository

$ cd old-repository.git
$ git push --mirror https://github.com/exampleuser/new-repository.git
# Mirror-push to the new repository

$ cd ..
$ rm -rf old-repository.git
# Remove our temporary local repository

원본에서 업데이트를받는 것을 포함하여 다른 위치에 리포지토리를 미러링하려는 경우 미러를 복제하고 주기적으로 변경 사항을 적용 할 수 있습니다.

$ git clone --mirror https://github.com/exampleuser/repository-to-mirror.git
# Make a bare mirrored clone of the repository

$ cd repository-to-mirror.git
$ git remote set-url --push origin https://github.com/exampleuser/mirrored
# Set the push location to your mirror

베어 클론과 마찬가지로 미러 클론에는 모든 원격 분기 및 태그가 포함되지만 페치 할 때마다 모든 로컬 참조를 덮어 쓰므로 항상 원본 리포지토리와 동일합니다. 푸시에 대한 URL을 설정하면 미러로 간단하게 푸시 할 수 있습니다. 미러를 업데이트하려면 업데이트를 가져 와서 푸시하십시오. 크론 작업을 실행하여 자동화 할 수 있습니다.

$ git fetch -p origin
$ git push --mirror

https://help.github.com/articles/duplicating-a-repository


이것은 repo 의 복제본 을 생성 하지만 GitHub 의미에서 포크 를 생성하지는 않습니다 . GitHub에서 실제 포크를 만들면 포크 이름 아래에 "exampleuser / repository-to-mirror에서 포크"텍스트가 표시됩니다. 또한 github.com/exampleuser/new-repository/network/members로 이동하면 다른 모든 포크 트리가 표시됩니다.
apaatsio

20

GitHub는 이제 새로운 가져 오기 저장소를 공개 또는 비공개로 원하는 것을 선택할 수있는 가져 오기 옵션을 제공합니다.

Github 리포지토리 가져 오기


가져 오기가 여전히 큰 저장소 (5 일)에서 실행 중이며, 체크 아웃하는 것이 훨씬 빠르지 만 최신 상태로 유지하기위한 추가 단계 일 수 있습니다. 마스터 브랜치뿐만 아니라 모든 것을 가져 오기 때문에 속도가 느리다는 것을 이해할 수 있습니다.
Liam Mitchell

1
나는 같은 대답을 추가하려고했지만 먼저 해 주셔서 감사합니다. 작년 1 월부터 Github 무료 개인 저장소를 제공하게되어 기쁩니다. : D
OBL
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.