2012-04-26 4 views
8

그래서 나는 두 개의 자식 repos 있습니다. 첫 번째는 우리의 프레임 워크 (db 추상화, 함수를 생각해보십시오)와 새로운 프로젝트에 대한 또 다른 git repo입니다.어떻게 자식 저장소를 중첩 할 수 있습니까? 가져 오기 및 병합

내가 프로젝트 자식에 프레임 워크 자식의 repo를 포함 할, 그리고 GitHub의 도움말에 따라,이 작업을해야 내가 병합을 수행 할 때

cd /project 
git remote add framework git://github.com/username/Framework.git 
git fetch framework 
git merge framework/master 

문제는, 그것은 모든 파일을 모든 것을 제공한다 프레임 워크를 만들고 프로젝트의 루트로 간단하게 덤프합니다. 대신 프레임 파일을 자식 디렉토리 (예 : /project/framework/)에 병합 할 수 있습니까?

답변

20

Git의 submodule 지원을 살펴볼 수 있습니다. 서브 모듈을 사용하면 하나의 git 저장소를 다른 git 저장소에 임베드 할 수 있습니다. 이 종류의 것에 alternative solutions가있다. 그러나 나는 그들 자신을 사용하지 않고 있었다.

예는 다음과 같습니다 당신이 서브 모듈과 저장소를 복제하는 경우

$ git clone git://github.com/username/project.git 
$ cd project 
$ git submodule add git://github.com/username/framework.git framework 
$ git commit -m "added framework submodule" 

, 당신은 --recursive 옵션을 사용해야합니다, 당신은 정기적으로 복제 할 수 있습니다

$ git clone --recursive git://<repository-with-submodules>.git 

또는 대안을하고 다음을 실행하십시오 :

$ git submodule init 
$ git submodule update 

링크 된 문서 (및 git submodule --help)를 참조하십시오. 변경 사항이 서브 모듈을 변경하면

,이처럼 그들을에서 가져 :

# first update the submodule just like any other git repository 
$ cd project/framework 
$ git pull 

# now you have to record the new commit in the parent repository 
$ cd .. 
$ git commit -m "updated framework submodule" 

마지막 단계가 필요한 자식이 (주어진 서브 모듈과 관련된 커밋 특정의 기록을 유지하기 때문에 때 누구 있도록 부모를 복제하면 상위 리포지토리에서 의도 한대로 작동하지 못하게하는 최신 변경 사항이 아닌 최신 버전이 아닌 해당 하위 버전의 하위 모듈을 얻을 수 있습니다. 따라서 하위 모듈을 업데이트하는 경우 부모에 새 커밋을 기록해야합니다.

framework 하위 모듈에서 변경 한 경우 다른 저장소와 마찬가지로 git push처럼 다시 변경해야합니다. 그런 다음 상위 모듈에서 새 개정을 확약해야합니다.

+0

프레임 워크가 변경되면 프로젝트에 모듈을 추가하려면 어떻게해야합니까? 또한 프로젝트 대신 프레임 워크를 변경하는 경우 어떻게 프레임 워크 git repo로 다시 밀어 넣을 수 있습니까? – Justin

+0

답변을 업데이트했습니다. – larsks

+0

작은 메모가 하나 있습니다. 하위 모듈 HEAD가 분리되어 있으므로 하위 모듈을 변경할 때주의해야합니다. 분기 (또는 분기로 전환)를 만들고, 변경하고, 커밋 한 다음 푸시합니다. – GoZoner