git merge 다른 저장소?


79

모든 프로젝트에 SVN을 사용하고 있습니다. 때때로 프로젝트 B는 프로젝트 A의 복사본으로 시작됩니다. 프로젝트 A에 일반적인 변경 사항이있을 때 svn merge A디렉터리 B 내에서 사용할 수 있으며 이러한 변경 사항을 병합합니다.

이제 git을 사용하고 싶다면. 모든 프로젝트를 동일한 저장소에 두는 것을 좋아하지 않습니다. 그런 다음 모든 것을 복제해야하고 SVN에서와 같이 하나의 프로젝트 만 선택할 수 없기 때문입니다. 하지만 각 프로젝트에 대해 하나의 리포지토리가있는 경우 이전에 SVN에서했던 것처럼 어떻게해야합니까?

질문은 하나의 원래 프로젝트와 실제로 관련된 여러 하위 프로젝트를 원하고 동기화 상태를 유지하는 데 가장 좋은 방법 무엇입니까? 그리고 나도 그것들을 따로 확인할 수 있기를 원합니다.


1
git-submodule ( kernel.org/pub/software/scm/git/docs/git-submodule.html )을 살펴 보는 것이 좋습니다 .
Cascabel

@Jefromi 그러나 소스 파일은 기본적으로 동일한 기록에서 나온 것입니다. 이것은 파일의 복사본이 두 개 있다는 것을 의미합니까? 나는 submodule이 별도의 파일 (병합이 아닌)로 포함하는 외부 라이브러리를 추적하는 데 더 적합하다고 생각합니까?
baloo

신경 쓰지 마세요. B가 A의 사본이라고 말한 것을 보지 못했습니다. "질문은"하위 프로젝트 ... 하나의 원본 프로젝트와 관련된 ... 동기화 "라고 말한 내용을 읽고 원래 프로젝트의 청크를 제거하지만 메타 프로젝트에서 동기화 상태를 유지합니다.
Cascabel

답변:


140

당신이 두 개의 프로젝트를 가지고있는 경우 proj1proj2및 변경 병합 할 proj1로를 proj2, 당신은 이런 식으로 할 것입니다 :

# in proj2:
git remote add proj1 path/to/proj1
git fetch proj1
git merge proj1/master # or whichever branch you want to merge

나는 이것이 당신이 SVN으로했던 것과 같은 일을한다고 믿습니다.


그러나 우리가 이미 병합 한 변경 # 2 트랙을 병합 할 것입니다. 올바른 기억이 나면 새 변경 사항이 추가 될 때마다 모든 변경 사항에 대해 모든 변경 사항 (및 수정 충돌)을 다시 병합해야했습니다. 이것은 SVN-way에서 발생하지 않았습니다
baloo

물론 병합은 평소와 같이 작동합니다. "모든 변경 사항을 제거"할 필요는 없습니다. 이것은 먼 서버에서 사용하는 일반적인 병합에 지나지 않습니다.
Olivier Verdier

리모컨이 없으면 어떻게합니까? 나는 똑같이하고 싶지만 (projA를 projB에 병합) 원격없이 로컬로만 작업하고 있습니다.
L. Holanda 2015

1
@LeoHolanda 로컬 파일은 git에 관한 한 원격 파일로 간주됩니다.
PyRulez

3
@LeoHolanda 여기에 포인트가 있습니다. 나는 그런 파일로, URL 형식으로 지역의 repo을 표시했다 : ///Users/abc/path/to/my/repo/.git
mcku
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.