깃 저장소 안에 또 다른 깃 저장소가 필요한 경우가 종종 생긴다. 이 때 사용하는 방법은 1) submodule 2) subtree 가 있다.
서브 모듈은 엄밀하게 말하면 내 저장소의 특정 커밋이 자식 저장소의 특정 커밋을 지정해서 포함시키는 방법이다.
안드로이드 같은 경우에는 google의 repo라는 툴을 이용하기도 하는데 개인적으로 상당히 좋아하는 툴이다. 관심있는 분들은 검색해 보시길.
git submoudule add 자식저장소주소 <디렉토리 이름>
git submodule add https://github.com/joshua1988/learn-typescript pangyo-ts
위 명령을 수행하면
1) 하위폴더 pangyo-ts에 해당 프로젝트를 클론한다.
2) .gitmodules 파일이 신규 생성된다.
3) .git/.config 파일에 서브모듈 관련 내용이 추가된다.
2)와 3)의 파일들도 열어서 내용을 확인해 보자.
git status # 이미 해당 내용이 스테이지에 올라가 이슨 것을 확인할 수 있다.
git commit -m "Add submodule josua ts"
커밋을 하면 현재 커밋에 서브모듈로 저징한 joshua1988 저장소의 최신 커밋이 내 저장소의 현재 커밋에 포함되게 된다.
서브모듈이 포함된 프로젝트를 클론하면 해당 디렉토리가 비어 있다. 서브 모듈의 내용을 가져오려면
git submodule init
git submodule udpate
한번에 서버모듈까지 가져오려면 clone 뒤에 --recurse-submodules
옵션을 붙이면 된다.
서버모듈 삭제는 조금 복잡하다.
.gitmoudules
파일을 열어 관련 서브모듈 내용을 삭제한다..git/config
파일을 열어서 관련 서브모듈 내용을 삭제한다.git rm --cached <서브모듈폴더>
아주 짧게 서브모듈에 관해 정리를 해 봤다.
아래 참고문서들이 아주 자세하게 잘 나와 있으니 읽어보자.