github의 git repo를 동일한 조직으로 복사 / 포크


83

두 개의 다른 도메인에 배포 된 웹 응용 프로그램이 포함 된 github에 저장소가 있습니다. 응용 프로그램에는 배포 된 도메인에 따라 다르게 작동하는 약간의 논리 분기가 있습니다.

각 도메인에 대해 하나씩 두 개의 개별 저장소로 분할하려는 지점에 도달했습니다.

Github는 동일한 조직으로 포크하는 것을 허용하지 않습니다. "git duplicate repo"를 검색하면 복제하고 미러링하여 푸시해야한다고 제안하지만 두 저장소를 동기화 상태로 유지하기위한 것 같습니다.

이것에 대해 가장 좋은 방법은 무엇입니까? 가능한 경우 새 복사본에서 이전 커밋 기록을 유지하고 싶습니다.


1
실제로 git clone --baregit push --mirror옵션은 정확히 원하는 것입니다. 두 저장소가 동기화되지는 않습니다. 그러나 모든 브랜치, 태그 등을 포함하여 모든 것을 보존 합니다. 임시 디렉토리에서이 작업을 수행하여 복사본을 만드십시오. 그런 다음 프로젝트 디렉토리의 원격에서 직접 새 사본을 복제하십시오.
hugelysuperiorman

답변:


103

새 저장소를 만들고 작업 복사본에서 푸시하기 만하면됩니다.

git clone git@github.com:me/myrepo-original
cd myrepo-original
git remote set-url origin git@github.com:me/myrepo-new
git push origin master

이제와 myrepo-new동일한 새 저장소 가 생겼습니다 myrepo-original.


3
좋아, 그리고 이것들은 서로를 추적하지 않을 것입니다. 두 개의 분리 된 분리 된 저장소가된다는 의미입니까? 그게 내가 원하는 것입니다.
jemminger

3
두 저장소 모두 push명시 적으로 업데이트하지 않는 한 업데이트되지 않으며 "새"저장소는 이전 저장소와의 관계를 표시하지 않습니다.
larsks

감사! 이것이 내가 필요한 것 같습니다.
jemminger

3
모든 가지를 밀 수도 있습니다.git push --all origin
Marius

이것은 나를 위해 일했지만 URL에 대해 다른 형식으로 변경해야했습니다. $ git remote set-url github.com/me/myrepo-new.git
Enfors

15

fork 관계가 필요하지 않은 경우 (예 : 어떤 이유로 든 어떤 종류의 분리 된 대체 저장소를 원함) Google 검색 및 Larsk의 대답에 의해 개요로 저장소를 복제하는 것이 좋습니다.

당신이 경우 않는 그것을 포크, 연락처 Github에서 지원 (support@github.com 또는 만들고 싶어 https://github.com/support ), 그들은 당신을 위해 동일 조직의 포크를 생성합니다. (그들은 이것에 대해 까다 롭지 않습니다. 계정 내의 리포지토리 이름은 고유해야하므로 리포지토리의 대체 이름을 제공해야합니다.)


업데이트 : 사용자 Steve Rice는 GitHub 지원팀이 현재 / 더 이상 귀하의 계정에 두 번째 포크를 설정하지 않을 것이라고 말했습니다.

GitHub는 최근에 동일한 계정으로 리포지토리를 포크하는 대안에 대한 기사를 게시했습니다. 여기에서 해당 기사를 읽을 수 있습니다 .


4
지원팀에 문의하여 응답 : "현재 한 계정이 동일한 네트워크에서 두 개의 저장소를 소유 할 수 없습니다." 대신 미러 저장소 를 설정하는 것이 좋습니다 .
Steve Rice

짜증나는 아아. 죄송합니다, 나는 그들이 자신의 정책 :( 변경했다 몰랐다
Nevik Rehnel

10

페이지 상단의 + 메뉴에서 Github의 Import Repository 옵션을 사용 하거나 열기 만하면됩니다.

https://github.com/new/import

이렇게하면 복사 된 저장소의 정확한 내용으로 새 저장소가 생성됩니다. 단점 ( Iarsks의 git 명령 응답 과 동일 )은 Github의 포크로 계산되지 않는다는 것입니다.


이 옵션을 어떻게 작동시킬 수 없었습니까? 방금 다시 테스트했으며 두 가지 간단한 단계로 작동합니다. 또는 github에 로컬 리포지토리를 만든 다음 가져 오기 기능을 사용합니다 (예 : github.com/sarob/mytest/import) .
sarob

GHE 대 github.com과 관련이있을 수 있지만 거기에서는 작동하지 않습니다.
serraosays

4

또 다른 방법은 복사 할 원본 저장소를 현재 저장소에 대한 원격으로 추가하는 것입니다.

#create a new repo in the org1 organization called myrepo-new

로컬 터미널에서 다음을 실행하십시오.

git clone git@github.com:org1/myrepo-new
cd myrepo-new
git remote -v #shows current repo link on github as origin
git remote add name-for-remote https://github.com/org1/repo-old
git remote -v #shows repo-old as name-for-remote
git fetch  name-for-remote
git merge name-for-remote/branch-to-get-from-remote
#Now fix any conflicts if present
#If number of files/commits is very high, the desktop client may hang when you try to commit your changes after merge. Try switching to Git Shell if this happens.
git status 
git commit -m "commit message"
git push origin master

1

대체 솔루션 :

새 조직을 만들고 거기에 포크하십시오. 저장소가 비공개 인 경우 새 조직에서도 비공개로 유지됩니다. 그런 다음 외부 개발자 또는 분기 된 저장소에 원하는 사람에게 액세스 권한을 부여 할 수 있으며 PR을 원래 저장소로 되돌릴 수 있습니다.


-2

로컬 폴더를 복제하고 git 항목을 삭제할 수는 없습니다.

rm -rf .git*

그런 다음 해당 폴더에 새 저장소를 만드시겠습니까? 깨끗하고 쉽게 보입니다.


2
삭제 ./.git/는 "가능한 경우 새 복사본에서 이전 커밋 기록을 보존하기 위해"OP가 명시한 의도에 도움이되지 않습니다.
MarkHu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.