git을 사용하다보면 다른 git 리포지토리를 그대로 갖다 써야되는 경우가 있습니다. 예를 들면 LLVM의 코어를 프로젝트 안에 포함시켜야할 때가 있는데요, 이때 프로젝트를 그대로 복사만 해놓으면 이후에 관리가 안됩니다.

그래서 git에서는 서브모듈(submodule, =nested repository)이라는 기능을 활용하고 .gitmodules 파일로 서브모듈들을 관리하게 됩니다.

 

 

마이크로소프트 STL 리포지토리

 

Github(깃허브)에서 폴더에 화살표가 그려진 아이콘이 있고 뒤에 커밋 ID가 써있는 폴더가 있는데 이게 서브모듈을 나타내는 겁니다.

예를 들면 마이크로소프트 STL은 llvm-project, vcpkg를 서브 모듈로 사용하고 있습니다.

 

 

LLVM 리포지토리

 

폴더를 클릭해보면 해당되는 커밋 ID의 리포지토리가 나옵니다.

 

$ git clone --recurse-submodules https://github.com/microsoft/STL.git

서브모듈이 있는 리포지토리를 클론(clone)할 때는 그냥 클론하면 서브모듈의 폴더는 텅 빈채로 클론이 됩니다. 그래서 위처럼 --recurse-submodules 옵션을 추가해줘야 클론할 때 서브모듈까지 같이 받아옵니다.