카테고리 없음

Git Submodule 사용 방법

뽀글뽀글 개발자 2024. 7. 16. 06:49

Git Submodule이란?

Git repository 안에 다른 repository를 주입할 수 있고, 주입된 repository가 submodule이 된다.

이때 submodule은 main repository와 독립적인 상태를 가진다.

즉, submodule에 대한 업데이트는 해당 디렉터리에서만 가능하다.

 

어떨 때 사용하는가?

  1. 모듈화된 다른 프로젝트를 받아서 사용하고 싶을 때
  2. 보안이 필요한 데이터를 private repo에 저장하고 해당 repo를 submodule로 등록해서 보안을 유지하고 싶을 때

나의 경우는 환경 변수와 설정 파일이 노출되지 않고, 어떤 환경에서든 프로젝트를 클론 받으면 환경 변수와 설정이 적용되게 만들고 싶었다.

hashicorp vault 같은 암호화 저장소를 사용하는 방법도 있지만, 간단한 프로젝트에서는 submodule이 매우 쉽게 적용할 수 있었기 때문에 선택하게 되었다.

 

 

사용 방법

서브 모듈을 등록하는 사람:  본인

git submodule add {submodule repo url}

submodule을 등록하고 나면 .gitmodules이라는 파일이 생성되고 submodule과 같은 이름의 폴더가 루트 경로에 생성된다.

 

등록된 서브 모듈을 받는 사람:  팀원

git submodule init
git submodule update

 

 

주의 사항

project에서 submodule를 init해서 받은 경우 아래 사진과 같이 고유한 브랜치가 생성된다.

따라서 여기서 업데이트를 아무리 해도 변경사항이 반영되지 않는다.

 

 .gitmodules 파일에 추가된 서브 모듈의 브랜치가 변경이 발생한 브랜치와 동일해야 서브 모듈의 변경 사항을 업데이트 받을 수  있다.

예를 들어 submodule의 main에 커밋을 했다면, 아래와 같이 branch가 main으로 되어있어야한다.

[submodule "secrets"]
	path = secrets
	url = {submodule url}
	branch = main

 

변경 사항 반영 명령어

 git submodule update --remote --merge

 

 

 

 

Gradle에서 서브 모듈의 파일을 원하는 위치로 가져오는 방법

task copyYML(type: Copy){
    copy {
        from '{서브 모듈에서 원하는 파일의 경로}'
        include "{내가 원하는 파일 ex) *.yml}"
        into '{가져오고 싶은 위치}'
    }
}