기존 리포지토리의 지점에서 새 GitHub 리포지토리를 생성하려면 어떻게해야합니까?


170

나는이 마스터새로운 프로젝트 지점. 이제 새로운 프로젝트 브랜치를 기반으로 마스터와 함께 새로운 레포를 만들고 싶습니다.

배경 : 세 개의 독립적 인 응용 프로그램을 포함하는 하나의 저장소가 있습니다. 이런 식으로 시작하지 않았습니다. 원래 repo에는 하나의 앱만있었습니다. 그러나 시간이 지남에 따라 비즈니스 요구 사항이 변경되었습니다. 하나의 앱이 두 개의 버전 (레거시 버전 및 재 작성)이되었습니다. 웹 서비스가 추가되었습니다. 세 가지 프로젝트를 포함하기 위해 별도의 지점이 사용되었습니다. 그러나 코드를 공유하지 않습니다. 따라서 자신의 저장소로 분리하는 것이 더 간단합니다.

답변:


294

@ user292677의 아이디어로 시작하여 문제를 해결하기 위해 수정했습니다.

  1. github에서 새로운 저장소 를 만듭니다 .
  2. 추출하려는 이전 리포지토리의 로컬 사본으로 cd하십시오. 이는 새로운 리포지토리 의 마스터 가 될 프로젝트 분기 를 추적하도록 설정되어 있습니다.
  3. $ git push https://github.com/accountname/new-repo.git +new-project:master

새로운 Github 저장소가 완성되었습니다. 결과는 다음과 같습니다.

  • 라는 새 Github의 저장소 새로운 REPO ,
  • master대응 이전의 repo의에 새로운 프로젝트
  • 모든 역사가 보존되었습니다.

실제로이 방법을 사용하면 원하는대로 이름이 바뀐 직접 선택한 지점을 사용하여 새 리포지토리를 만들 수 있습니다.

$ git push git@github.com:accountname/new_repo +new-project:master +site3a:rails3

결과적으로 기존 site3a 브랜치도 이제 새로운 저장소로 이동하여 rails3로 나타납니다 . 네트워크 다이어그램은 새로운 마스터레일 3 을 전체 히스토리와 서로 정확한 관계로 보여줍니다 .

2013-12-07 업데이트 : 다른 프로젝트와 함께이 레시피가 여전히 작동하는지 확인했습니다.

2018-01-11 업데이트 : https 프로토콜에 GitHub 권장 사항을 사용하도록 3 단계를 업데이트했습니다. 레시피는 여전히 작동합니다.


@Dogweather 님, 안녕하세요. 공유해 주셔서 감사합니다. 메소드와의 차이점을 설명하고 원거리 원격 URL을 변경하고 새로운 repo 메소드로 푸시 할 수 있습니까?
Vincent

5
Dogweather, 나는 내가 기억할 수있는 것보다 더 많은 솔루션을 사용했습니다. 감사! 나는 이것이 나를 위해 일하기 전에 old_branch를 먼저 체크 아웃해야했다
Bjorn Theart

3
이것은 태그를 복사하지 않습니다. 나는 당신이 그것을 필요 --follow-tags로 할 것이라고 믿습니다 .
Factor Mystic

1
Github에서 리포지토리를 생성 할 필요는 없습니다 push. 로컬 로컬 git init
로만 리포팅

1
커밋 기록을 모두 새로운 저장소로 옮기고 싶지 않습니다. 자식 저장소에 속하는 커밋을 복사하고 싶었습니다. 이게 가능해 ??
Arbaz Rizvi

26

최신 정보:

old_branch를 포함하는 로컬 저장소로 cd 및 :

$ git push https://github.com/accountname/new_repo.git +old_branch:master

9
git clone -b new-project /path/to/repo /new/repo/path

편집 : GitHub 내에서 리포지토리를 "포크"한 다음 클론의 관리 탭으로 이동할 수 있습니다. “리포지토리 이름”과“가시성”아래에는 지점 드롭 다운 메뉴가있는“기본 지점”이 있습니다. 를 선택하십시오 new-project.

재 편집 : master방금 "기본"분기가 아니라 설정하려는 분기 임을 깨달았습니다 . 그래서…

  • GitHub에서로 복제 them/repo하십시오 you/repo.
  • 운영 git clone git@github.com:you/repo.git
  • 시작하십시오 gitk.
  • [ old-master이전 커밋을 추적하지 않도록 분기 를 만들고 싶을 수도 있습니다 .]
  • new-project지점에서 가장 최근의 커밋을 찾아서 커밋 메시지를 마우스 오른쪽 버튼으로 클릭 한 다음 "여기에 마스터 브랜치 재설정"을 선택하십시오. (을 사용하여 명령 줄 에서이 작업을 수행 할 수도 git-reset있지만 올바른 호출을 찾지 못했습니다.)

다음 GitHub 리포지토리로의 푸시는 --force옵션 으로 수행해야 하지만 그렇지 않으면 완료됩니다.

그것이 자신의 저장소 중 하나라면 당신은 이것을하기 위해 ...

  • 운영 git clone git@github.com:you/orig.git
  • 운영 git clone orig copy
  • 위에서 설명한 것처럼 로컬 copy리포지토리에서 master분기를 원하는 위치로 다시 설정하십시오 .
  • 빈 GitHub 프로젝트를 만듭니다 you/copy. GitHub의 지시에 따라 해당 프로젝트를 로컬 버전의 리모컨으로 설정하고을 (를 copy) 누르면 master완료됩니다!

흠! 첫 번째 단계를 수행하는 방법을 잘 모르겠습니다 : github 내에서 저장소를 복제하십시오. 나는 그것이 가능하지 않다고 생각합니다.
Dogweather

@Dogweather, GitHub에서 "포킹"이라고합니다. 명확성을 위해 답변을 편집했습니다.
JC Salomon

한 계정에서 리포지를 포크 할 수 없었습니다. 직접 해보셨습니까?
Dogweather

5
  1. github에서 NEW_REPOSITORY를 만듭니다.
  2. cd OLD_REPOSITORY
  3. git push https://github.com/accountname/NEW_REPO + master : master

그리고 그게 다야. (참고 : git history가 보존 됨)

위의 답변을 시도했지만 + master : master를 지정하지 않았기 때문에 충분히 구체적이지 않은 것으로 나타났습니다. 잘 작동합니다.

출처 (github의 ssh 문제를 피하기 위해 수정 한 내용) : Mauricio Aiello, 전 Java 수석 개발자, https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a 기존 리포지토리 지점


그것은 실제로 받아 들여진 대답보다 더 유용합니다. 이전 저장소를 새 저장소로 푸시하지 못하는 경우 Git이 src refspec 오류에 대해 불평하는 상황에서도 작동합니다.
Informagic

2

이것이 좋은 방법인지 확실하지 않지만 어쨌든 쉽습니다.

git clone -b new-project git@github.com:User/YourProject.git newProjcet

그런 다음 github에서 새 저장소를 만들고 밀어 넣으십시오.


2

단순히 새 저장소를 만들면 이전 저장소에 대한 참조가 손실되고 새 프로젝트와 동기화 된 원래 프로젝트에 대한 업데이트를 유지하기가 더 어려워집니다. 아마도 레포를 포크하는 것이 낫지 않습니까?


0

정답에 약간의 추가 :

$ git push git@github.com : 계정 이름 / new_repo + old_branch : master

"git@github.com : accountname / new_repo"=> github "복제 또는 다운로드"풀다운 메뉴에서 가져 오기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.