git submodule

후니팍·2023년 7월 29일
0
post-thumbnail

안녕하세요. 이번에 우테코 프로젝트를 진행하면서 환경변수를 git submodule로 관리하게 되어 이에 관해 글을 남기고자 합니다.

이전까지는...

메신저로 공유

이전 프로젝트들을 진행하면서 모든 환경 변수 파일을 메신저를 통해 공유했습니다.
환경 변수가 바뀔 때마다 톡방이나 슬랙 채널에 남기게 되었는데요.
거참 되게 불편하죠...? 하지만 이때 당시에는 비밀 파일이기 때문에 당연한줄 알았습니다.


깃헙 서브모듈이란?

한 저장소 안에 있는 또 다른 별개의 저장소입니다.
이때 상위 저장소를 슈퍼 프로젝트(super project), 하위 저장소를 서브 모듈(sub module)이라고 합니다.
레포지토리 안에 다른 레포지토리가 있다고 이해하시면 편할 것 같습니다.

보통 대형 프로젝트에서 기능을 분리하기 위한 목적으로 사용되는데요. 저희 팀은 서브 모듈을 private 레포지토리로 설정하고 해당 레포지토리에 application*.yml 파일을 저장하기 위한 목적으로 사용했습니다.


레포지토리 연결

먼저 메인과 서브 두 레포지토리를 만듭니다.
저는 연습용 레포인 CICD 레포지토리를 슈퍼 프로젝트, sub-module 레포지토리를 서브 모듈로 두었습니다.

왼쪽이 서브, 오른쪽이 메인입니다!

메인에서 서브모듈을 등록해보겠습니다!

# git submodule add [repository-url] [path]
git submodule add https://github.com/shb03323/sub-module.git

만약 path를 생략한다면 git repository 명으로 디랙토리가 생성됩니다.

서브모듈을 등록하게 되면 위 사진과 같이 .gitmodulessub-module 디랙토리가 생성된 것을 볼 수 있습니다.

.gitmodules

.gitmodules를 살펴보면 아래와 같이 서브 모듈의 경로와 repository 주소를 등록한 것을 확인할 수 있습니다.

서브 모듈 디랙토리

서브 모듈에서는 깃 초기화만 진행하고 아무 진행하지 않아 readme 파일만 있는 상태입니다.
깃헙 홈페이지에서는 아래와 같이 보입니다. @ac18ce4 와 같은 해시값이 디랙토리 이름 옆에 붙어있는데요. 이는 서브 모듈 레포지토리의 커밋 주소입니다!


서브 모듈 변동 사항 반영

서브 모듈 연결까지 성공했으니 이제 서브 모듈 변경사항을 슈퍼 프로젝트에 반영해보겠습니다.

우선 서브 모듈에 커밋, 푸시합니다.
저는 아래와 같이 리드미를 수정하여 커밋했습니다.


푸시를 진행하니 커밋 주소가 ac18ce4 -> ef4a463 으로 바뀐 것을 확인할 수 있습니다.

그렇다면 슈퍼 프로젝트에서는 어떻게 보일까요? 확인해보겠습니다.

아직 슈퍼 프로젝트에는 반영되지 않은 것을 확인할 수 있습니다. pull도 진행해보았는데요. 아래와 같이 최신 버전이라는 말만 나오고 반영되지 않고 있었습니다.

왜그럴까요? 서브 모듈 저장소는 슈퍼 프로젝트 저장소와 독립적인 저장소이기 때문입니다.
서브 모듈의 변동 사항을 반영하기 위해서는 아래의 명령어를 입력해주어야 합니다.

git submodule update --remote


무엇인가 pull 받아오는 것을 확인할 수 있습니다. 리드미에도 정상적으로 업데이트 되었네요.

푸시를 하게 되면 아래와 같이 커밋 주소가 바뀐 것을 확인할 수 있습니다.


마무리

동료들과 서브모듈을 이용하여 환경 변수를 주고 받는 방법에 대해 알아보았는데요.
원래 이런 용도로 사용하라고 만든 것은 아닌 것 같은데... private 레포를 파서 아주 잘 사용하고 있습니다. 하하하

profile
영차영차

1개의 댓글

comment-user-thumbnail
2023년 7월 29일

정보 감사합니다.

답글 달기