2013-11-14 10 views
14

쉬운 개발을 위해 하나의 구조에 10 개 이상의 리포지토리를 집계하기 위해 git 서브 모듈을 사용하려고합니다.리모트 브랜치를 추적하기위한 Git 서브 모듈

모듈을 복제하고 분기를 체크 아웃해야합니다. 대신 모듈이 분리 헤드 모드로 체크 아웃됩니다.

git clone [email protected]:org/global-repository.git 
git submodule update —init 
cd config-framework 
git status 

$git status 
#HEAD detached at b932ab5 
nothing to commit, working directory clean 

파일 우리는 MY_BRANCH 지점이 아니라 분리 된 머리보다 기본적으로 체크 아웃 할

$cat .gitmodules 
[submodule "config-framework"] 
     path = config-framework 
     url = [email protected]:org/config-framework.git 
     branch = MY_BRANCH 

괜찮을 것 같다 gitmodules. 어떻게 달성 할 수 있습니까?

+0

이것은 서브 모듈이 작동하는 방식입니다. 마스터 프로젝트는 분기가 아닌 특정 커밋을 참조합니다. – twalberg

답변

18

서브 모듈은 항상detached HEAD mode에서 체크 아웃합니다.

서브 모듈이 special entry in the index of the parent repo에 저장된 SHA1을 체크 아웃하기 때문입니다. 당신이 서브 모듈을 사용하면 .gitmodules에 등록 된 지점을 따르십시오

플러스, 다음이 필요합니다

git submodule update --init --remote 

--remotegit fetch을 더한 새로운 HEAD의 체크 아웃됩니다.
아아아, 체크 아웃조차도 분기가 아니라 커밋이 될 것입니다 (서브 모듈에 로컬 브랜치가 없기 때문에). ... 분리 된 HEAD 모드로 돌아갑니다.
"Git submodules: Specify a branch/tag"에 더 많은 것을보십시오.

당신은 (테스트하지) 시도 할 수는 :

git submodule foreach 'git checkout -b $(git config -f /path/to/parent/repo/.gitmodules --get submodule.$path.branch)' 

내가 git submodule foreach이 '$path'에 대한 액세스 권한이있는 사실을 활용의 superproject에 서브 모듈 디렉토리 상대의 이름.


는 (2014 에이프릴 2D, commit d851ffb)가 자동으로 (망할 놈의 2.0 commit 23d25e4)에 체크 아웃하는 서브 모듈에 대한 분기를 지정하는 시도였다 .... 그러나 그것은 반전되었다!
곧 출시 될 수도 있지만 현재 구현되지는 않습니다.

+0

내 관련 질문에 대답 할 수 있다면 감사하겠습니다. http://stackoverflow.com/q/25799319/2872891. 고맙습니다! –

1

당신의 계획이 서브 모듈에 기여한다면 가장 좋은 방법은 정규 git repo로 별도로 체크 아웃하는 것입니다. 다른 리모컨으로 지사에서 일하십니까? 그런 다음 테스트를 위해 사용하려는 단일 리모컨에서 서브 모듈을 가리 킵니다.