티스토리 뷰

Learn/Git

Git 서브모듈 (Submodule)

앤오엔 2023. 6. 2. 06:15

MSA 등의 아키텍처로 프로젝트를 구성하다보면, 모노 레포가 아닌 다른 외부의 레포지토리를 사용해야 하는 상황이 발생한다.

외부에서 개발한 라이브러리일수도 또는 내부의 여러 프로젝트에서 공통으로 사용 하는 라이브러리일 수 있다.

예를 들어 서로 다른 두 프로젝트를 별개로 관리하면서 하나는 다른 프로젝트 하위에서 작업할 수 있어야 한다.

 

Git의 서브모듈은 이러한 문제를 해결하기 위한 도구로, Git 저장소 안에 다른 Git 저장소를 디렉토리로 분리해 넣어 서브모듈을 만든다.

다른 독립된 Git 저장소를 Clone 해서 내 Git 저장소 안에 포함할 수 있으며 각 저장소의 커밋은 독립적으로 관리한다.

 

 

서브모듈 추가하기

이미 만들어둔 Git 레포지토리에 서브모듈을 추가하기

git submodule [-d [branch]] add [url] [directory]

git submodule -d develop add https://github.com/chaconinc/DbConnector newDbConnector

기본적으로 서브모듈은 레포지토리의 이름으로 디렉토리로 생성된다.

만약 다른 디렉토리 이름으로 만들고자 할 때는 명령 마지막에 원하는 이름을 입력하면 된다.

 

.gitmodules 파일 생성

서브디렉토리와 하위 프로젝트 URL의 매핑 정보를 담은 설정파일이 만들어진다.

서브모듈 개수만큼 아래 세트의 내용이 생기며 .gitignore 파일처럼 버전을 관리할 수 있다.

[submodule "newDbConnector"]
    path = DbConnector
    url = <https://github.com/chaconinc/DbConnector>
    branch = develop

 

서브모듈 포함한 프로젝트 Clone

1) 기본 Clone → 서브모듈 환경 만들기

git clone https://github.com/chaconinc/MainProject

# 서브모듈 정보를 기반으로 로컬 환경설정 파일이 준비됨
git submodule init 

# 서브모듈의 변경 사항을 업데이트하고 Checkout
git submodule update

# 모든 서브모듈 최신으로 업데이트
git submodule update --remote

 

2) 보다 간단하게 서브모듈까지 한꺼번에 Clone 하기

git clone --recurse-submodules https://github.com/chaconinc/MainProject

 

참고자료

Git - 서브모듈

댓글