2008-10-28 5 views
47

구조는 다음과 같다 :하나의 저장소에서 서로 다른 두 저장소의 두 가지를 결합하는 방법은 무엇입니까? 내 Git 저장소의

A-B-C-D-E-F # master branch in separate repo1 
A-B-C-D-E-G-H # master branch in separate repo2 

A-H 간단한 커밋합니다. 보시다시피 저장소가 관련되어 있습니다 (repo2는 repo1의 포크입니다). 나는이 두 저장소를 하나로 결합하려고 노력하고있다.

A-B-C-D-E-F # master branch of previous repo1 
     \ 
     \ 
      G-H # master branch of previous repo2 

내가 이미 망할 놈의 사용 설명서를 읽고 많은 시간을 보냈다 등등했습니다

는 그 후 하나의 저장소는 다음과 같은 구조를 가져야한다. 그러나이 (특수한) 사용 사례는 어디에도 문서화되어 있지 않은 것 같습니다.

+0

때로는 해결 방법이 너무 간단하여 스스로 알아 내기가 쉽지 않습니다. –

답변

70

원격 저장소와 동일한 파일 시스템에서 다른 git 저장소를 처리 할 수 ​​있습니다. 처음에

다음을합니까 :

git remote add <name> /path/to/other/repo/.git 
git fetch <name> 
git branch <name> <name>/master #optional 

은 이제 그들은 하나의 저장소에 두 가지입니다. git checkout, git merge와 병합 등을 통해 전환 할 수 있습니다.

7

그림은 repo1에 병합 G와 H가 병합 될 때 "병합하여 두 개의 리포지토리"를 원하지 않는다고 제안합니다. repo2를 리모컨으로 repo1에 추가하고 변경 사항을 가져 오거나 가져 오는 등 간단한 작업을 할 수 있어야합니다.

4

짐 (Jim)이 옳다고 생각합니다. 또한 두 개의 커밋이 코드에 대해 정확히 동일한 패치/diff를 수행하면 정확히 동일한 SHA1 해시를 갖습니다. 따라서 A부터 E까지는 양쪽 저장소에서 동일한 SHA1을 가져야하므로 하나에서 다른 저장소로 병합 할 때 문제가되어서는 안되며 병합 된 저장소를 앞으로 나아갈 유일한 저장소로 유지해야합니다.

repo1에서 repo2의 추적 분기를 설정 한 다음 원하는 방식으로 병합을 지연 할 수 있습니다.

관련 문제