2014-02-06 2 views
2

하위 모듈로 Github 저장소 (vendor/one)를 포함하는 앱이 있습니다. 내 변경 사항을 공유하고 끌어 오기 요청을 보내려면 Github의 vendor/one ~ me/one을 포크합니다. 로GitHub에서 업스트림을 서브 모듈로 병합하는 방법은 무엇입니까?

로컬, 나는 서브 모듈을 설정 : 나는 push origin master

cd ~/Projects/app 
git submodule add https://github.com/me/one.git Libraries/One 
cd Libraries/One 
git remote add upstream https://github.com/vendor/one.git 

시간이 지남에 따라 ...

  • 몇 번 vendor/one에 새로운 커밋이 있습니다
  • 저장소

한 지점에서과 병합하고 싶습니다.은 새로운 기능과 패치를 제공하기 위해 me/one 커밋을 보존하고 싶습니다. 그래서 내가 무엇을 할 계획입니까?

cd ~/Projects/app 
cd Libraries/One 
git branch temp 
git checkout temp 
git fetch upstream 
git merge upstream/master 
(conflicts expected) 
(resolve conflicts) 
(merge temp with master) 
push origin master 

위의 워크 플로가 의미가 있습니까? 어딘가에 자습서 또는 모범 사례가 있습니까?

답변

2

upstream/master의 미러 이미지와 마찬가지로 master의 히스토리를 보존하면서 업스트림/마스터의 위의 커밋을 재생하여 병합하는 대신 리베이스하는 것이 좋습니다.
커밋이 단순히 최신 버전 인 upstream/master 위에 있기 때문에 향후 업스트림 요청을 쉽게 적용 할 수 있습니다.

푸시가 필요하지만 포크이므로 어쨌든 해당 repo의 유일한 참여자가 될 가능성이 큽니다.

cd ~/Projects/app 
cd Libraries/One 
git fetch upstream 
git rebase upstream/master 
(conflicts expected) 
(resolve conflicts) 
push -f origin master 
0

서브 모듈

당신이 당신의 저장소로 서브 모듈을 복제, 그것은 자신의 .git/config 파일과 자신의 원래 개념이됩니다. 하위 모듈이 사용자의 것으로 가정하면 (예 : 리모컨의 타사 저장소가 없음) 하위 모듈에 대해 상류 원격을 생성하는 것에 대해 걱정할 필요가 없습니다.

하위 모듈에 대한 업스트림 리모컨을 만들어야하는 경우에는 충분히 쉽습니다. 하위 모듈의 최상위 디렉토리로 들어가서 주 저장소와 동일한 방식으로 서브 모듈의 디렉토리에 넣으십시오. 서브 모듈 정말 superproject에서 추적 몇 가지 추가 메타 정보와 단지 보통의 자식 저장소이기 때문에

cd myForkOfOtherProject 
git remote add upstream git://example.com/otherProject.git 

, 아니의 네임 충돌이 없습니다. 수퍼 프로젝트와 하위 모듈은 .git/config 개의 파일을 공유하지 않습니다.

다른 저장소와 같은 방법으로 원점과 하위 모듈을 처리합니다. 하위 모듈 내부에서 실행하는 힘내 명령은 하위 프로젝트의 독립적인데, 이는 주로 하위 모듈의 현재 커밋 ID를 추적하는 데 관심이 있습니다.

관련 문제