[git] submodule

stanley.·2024년 4월 17일
0
post-thumbnail

개요

프로젝트를 진행하다보면 JWT SecretKey나 AWS 관련 설정 파일과 같이 외부에 공개되기에 민감한 정보들이 있기 마련이다.
이러한 정보는 git이 제공하는 submodule을 통해 코드를 외부에 공개하면서도 안전하게 관리할 수 있다.

서브 모듈이란?

  • Git 레포지토리 하위에 다른 레포지토리를 관리하기 위한 도구
  • 상위 레포지토리 : 슈퍼 프로젝트
  • 하위 레포지토리 : 서브 모듈
  • 서브모듈을 사용하면 특정 git 레포지토리를 다른 레포지토리의 하위 디렉토리로 사용할 수 있다.
  • 상위 레포지토리에 서브 모듈을 추가하면, 상위 레포지토리는 하위 모듈의 특정 커밋을 가리키게 된다.

직접 실습을 진행하며 서브 모듈에 대해 이해해 나가보자!

서브모듈 등록

git submodule add https://github.com/cmkxak/submodule-practice.git src/main/resources/security
  • 상위 레포지토리 디렉토리에 하위 레포지토리가 클론되며, 서브모듈이 등록된다.
  • 하위 레포지토리 경로 뒤에 작성하는 서브모듈의 경로를 지정해주어 원하는 경로에 하위 레포지토리의 내용을 저장할 수 있다.

위 과정을 마치면, 아래와 같이 .gitmodules 파일이 생성된다.

.gitmodules 파일에 적힌 내용은 아래와 같이 하위 레포지토리의 내용이 저장된 path와 하위 레포지토리의 url이 기본적으로 작성된다.

[submodule "src/main/resources/security"]
	path = src/main/resources/security
	url = https://github.com/cmkxak/gpt-config.git

이 후 .gitmodules 파일과 submodule에 저장된 내용들이 staging 되어 있는 상태가 되어있게 되는데 이를 commit 후 push 해주면 아래와 같이 서브모듈을 정상적으로 적용할 수 있다.

다른 사람은 서브모듈 파일에 어떻게 접근할까?

  • 일반적으로 서브모듈을 포함하는 프로젝트를 클론해오면, 서브모듈 디렉토리는 빈 디렉토리가 된다.
  • 다른 개발자들이 git clone을 통해 프로젝트를 clone 해온 뒤 서브모듈에 접근하는 방법은 아래와 같다.
  1. 서브모듈을 초기화 하고 update 한다. (update 시 서브모듈의 가장 최신 커밋을 가리킨다.)
git submodule init
git submodule update
  1. git clone시, --recurse-submodules 옵션을 사용한다.
git clone --recurse-submodules <상위 레포지토리 경로>

서브모듈 업데이트 반영하기

  • 프로젝트를 진행하다보면 설정파일의 값이 변경되기 마련이다.
  • 하위 레포지토리 (서브모듈)와 상위 레포지토리는 분명히 다른 레포지토리 이므로, 하위 레포지토리의 변경 내용을 상위 레포지토리에도 반영해줘야 한다.
  • 상위 레포지토리에서 아래 명령어를 통해 서브모듈의 가장 최신 커밋을 가져올 수 있다.
-- 로컬에서 작업 중인 부분과 원격 저장소에 작업된 부분이 다른 경우 머지 까지 진행
git submodule update --remote --merge

-- .gitmodules 파일에 정의되어 있는 브랜치의 최신 버전으로 업데이트 (혹은 default 브랜치)
git submodule update --remote
  • 상위 레포지토리에서 스테이징 상태로 되어 있는 서브모듈의 변경 내역을 add -> commit -> push 하여 반영할 수 있다.

레퍼런스

https://hudi.blog/git-submodule/
https://tecoble.techcourse.co.kr/post/2021-07-31-git-submodule/

profile
🖥 Junior Developer.

0개의 댓글