여러개의 Git 저장소 (repository)로 이루어진 프로젝트 관리하기
프로젝트를 진행하다보면 여러 프로젝트에서 사용하는 공통 모듈이 존재하곤 합니다.
Git은 이를 대비해 submodule 기능을 제공합니다. Submodule은 subversion의 external link 와 유사한 개념으로 다른 git 저장소를 링크할 수 있습니다.
주의 점은 submodule은 지정된 저장소 (repository)의 HEAD (최근 갱신)을 가리키지 않고 특정 버전을 가리키게 됩니다.
이는 단점이자 submodule의 버전을 관리 할 수 있는 장점이 되기도 합니다.
서브모듈 연결하기
사전 조건
1) Submodule repository 준비: 본 글에서는 c:\gitrepo\subrepo
2) 프로젝트 repository 준비: 본 글에서는 c:\gitrepo\projectrepo
절차
Step 1) 프로젝트 repository clone (작업 공간= c:/workspace)
git clone c:\gitrepo\projectrepo .
Step 2) Submodule 추가하고 remote에 반영 (subrepo의 HEAD에 연결)
git submodule add c:\gitrepo\subrepo subrepo #project\subrepo directory에 submodule 연결
git commit -m "서브모듈 추가"
git push
Step 3) 다른 workspace에서 submodule이 포함된 project 저장소 클론하기
git clone --recurse-submodules c:\gitrepo\projectrepo .
</서브모듈 연결 끝>
연결된 서브모듈의 버전 변경하기
사전 조건
1) subrepo 의 버전 "4feb206abf852abf1c6eff453db7d625699e14ee" 으로 갱신하는 예
2) subrepo의 git 설정 수정 (.git/config 파일에 아래 두 줄 추가)
[receive]
denyCurrentBranch = warn
절차
Step 1) 프로젝트 repository clone (작업 공간= c:/workspace\project)
git clone --recurse-submodules c:\gitrepo\projectrepo .
Step 2) subrepo의 hash 보기
git log 을 통해 subrepo의 해쉬 확인
본 예에서는 "4feb206abf852abf1c6eff453db7d625699e14ee" 로 결정
Step 3) project workspace (로컬 repository)에서 subrepo 버전 갱신
cd subrepo
git checkout 4feb206abf852abf1c6eff453db7d625699e14ee
cd .. #project root directory로 이동
git commit -am "subrepo의 버전 갱신 - 4feb206abf852abf1c6eff453db7d625699e14ee"
git push
Step 4) 다른 사용자들이 update 된 submodule을 받는 방법
git submodule update --recursive #하위 submodule들 모두 갱신
</끝>