Skip to content

[BE] 서브모듈

xrabcde edited this page Sep 23, 2021 · 22 revisions

개요

Git 저장소 안에 다른 Git 저장소를 디렉토리로 분리해 넣는 것이 서브모듈이다. - git-scm.com

하나의 레포지토리안에, 또 다른 레포지토리를 두는 것을 뜻한다.


특성

  • 기본적으로 깃 레포지토리는 .gitignore에 의해 무시되는 파일과 빈 디렉토리를 제외하고 자신의 모든 하위 디렉토리 및 파일을 관리하지만, 서브모듈로 만들어진 디렉토리의 하위 내용은 관리하지 않는다.
  • 온라인 저장소에 올려 브라우저 상으로 확인하더라도 서브모듈의 존재는 알 수 있지만, 내부는 알 수 없다. // todo public 저장소도 그러한지 확인하기

활용

  • private 저장소를 서브모듈로 등록해둔다면, 해당 저장소에 대한 접근 권한이 있는 일부의 사람들만 슈퍼 프로젝트 레포지토리를 내용의 누락없이 온전히 clone 할 수 있다는 의미가 된다.
  • 이를 응용하여, 일부의 권한이 있는 깃 계정을 사용하는 유저들에게만 공유되어야 하는 파일들(주로 보안과 관련있는 값들이 있는 파일들)을 서브모듈에 넣어 외부로부터 감출 수 있다.


사용법

전제

  • 서브 모듈로 사용할 레포지토리는 원격 저장소에 미리 만들어두고, 필요한 파일을 세팅해두었다고 전제한다.
  • private 저장소를 서브모듈로 사용하고자 하는 경우, 로컬 환경에 등록된 git 계정은 해당 레포지토리에 대한 접근 권한이 있다고 전제한다.

1. 서브모듈을 등록할 때

i) 슈퍼 프로젝트 레포지토리에서 서브모듈을 추가하고자 하는 디렉토리로 이동한다.

$ cd backend/src/main/resources

ii) git submodule add 커맨드를 이용해, 서브모듈을 등록한다.

  • git submodule add -b ${브랜치명} ${서브모듈로 쓰고자하는 레포지토리 Url}
$ git submodule add -b main https://github.com/zzimkkong/config

iii) 최상위디렉토리/.gitmodules에 잘 추가되었다면 성공이다.

[submodule "backend/src/main/resources/config"]
	path = backend/src/main/resources/config
	url = https://github.com/zzimkkong/config.git
	branch = main

iv) 젠킨스와의 연동은 문서 하단에 별도로 추가 서술한다. // Todo 젠킨스 직접 설정해보고 세팅법 올리기


2. 서브모듈을 사용할 때

case 1. 레포지토리를 클론 받는 경우

i) 클론 옵션에 --recurse-submodules을 붙여준다.

  • git clone --recurse-submodules ${슈퍼 프로젝트 레포지토리 Url}
$ git clone --recurse-submodules https://github.com/woowacourse-teams/2021-zzimkkong.git

case 2. 이미 작업중인 레포지토리가 있는 경우 (원격 저장소에 누군가 서브모듈을 등록해 Push한 경우)

i) 프로젝트를 최신화 해준다.

$ git pull

ii) 서브 모듈들을 일괄적으로 클론해온다.

$ git submodule update --init --remote

case 3. 서브모듈의 최신화

슈퍼 프로젝트 레포지토리에서 pull을 한다고 해서 서브모듈의 커밋까지 최신화 되지 않는다.

i) 각 서브 모듈을 일괄적으로 업데이트 해준다. git submodule update --remote --merge

$ git submodule update --remote --merge