💋 인트로
안녕하세요. 우아한테크코스 5기 깃짱이라고 합니다.
서브모듈이란, 레포지토리 안에 또다른 레포지토리를 디렉토리로 분리해 넣은 것이다.
왜 필요할까? 우리는 프로젝트에서 사용하게 될 각종 Secrets들을 절대로 깃허브의 public 레포지토리에 Push해서는 안된다. 지울 수 없고, 로봇이 지나가면서 다 내 정보를 털게 될 것이다.
서브모듈을 사용해서 통째로 중요한 설정 정보를 관리하자!
이 포스팅에서 내가 사용하는 메인 레포지토리는 backend-server
이고, 메인 레포지토리의 설정 정보만을 담은 레포지토리는 backend-server-submodule
이다.
이 포스팅은 간단히 따라할 수 있도록 방법에 대해서만 포스팅할 것이다.
💋 Git Submodules 설정 방법
✔️ 서브모듈 추가
backend-server
에 들어가서, 아래와 같이 서브모듈을 추가하자.
# git submodule add [서브모듈 레포지토리] [메인 레포지토리 내 추가할 위치(생략 시 메인 레포지토리 루트에 생성됨)]
git submodule add https://github.com/sallang-e/backend-server-submodule.git src/main/resources/security
나는 별도로 src/main/resources/security
위치에 서브모듈을 추가하기 위해서 위와 같이 적어 주었다.
이렇게 하면, 내가 지정한 위치에 서브모듈이 생긴다.
✔️ 깃 상태 확인
두 개의 파일이 새롭게 생성된 것을 확인할 수 있다.
git status
(무튼 이렇게 두 가지 파일이 새롭게 생성되면 됨)
✔️ .gitmodules
이 파일을 통해서 우리는 서브모듈을 가져올 수 있게 된다.
✔️ 기존 설정파일이 서브모듈의 파일을 향하도록 변경
기존에 사용하던 application.yml
대신, 이제는 서브모듈의 application.yml
을 사용하도록 변경해야 한다.
기존의 application.yml
spring:
config:
import:
- security/application.yml
물론, import
아래의 위치는 내가 설정한 서브모듈의 위치로 정확하게 설정해야 한다!
💋 Git Submodules 명령어
✔️ 서브모듈을 포함한 메인 레포지토리 clone하기
이제 그냥 기존 메인 레포지토리만 clone하게 되면, 서브모듈을 함께 가져오지 않아서 설정 파일이 비어있게 된다. (대부분의 경우에 에러가 난다.)
아래 명령어를 통해서 서브모듈을 포함해서 함께 프로젝트를 clone할 수 있다.
git clone --recurse-submodules [clone할 메인 레포지토리 이름].git
✔️ 메인 레포지토리에서 서브모듈 별도로 받아오기
위에서 말한 것처럼 함께 clone하지 않은 경우, 서브모듈만 별도로 받아올 수 있다. 아래 두가지의 명령어를 더 실행시켜주어야 한다.
git submodule foreach git pull origin main
아래와 같은 명령어도 있는데, 나는 아래 명령어가 잘 작동하지 않는다. (왜인지는 찾아보고 다시 올릴게요)
# 서브모듈 정보를 기반으로 로컬 환경설정 파일을 생성
git submodule init
# 서브모듈의 리모트 저장소에서 데이터를 가져옴.
git submodule update
✔️ Git Submodules 삭제
설정하다 망한 것 같으면 그냥 삭제하고 다시 하는게 낫다.
git submodule deinit -f [삭제할 서브 모듈의 위치]
💋 참고자료
- https://hudi.blog/git-submodule/
- https://data-engineer-tech.tistory.com/20
- https://velog.io/@roycewon/Submodule을-통한-Secret-key-관리
도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!
'Git' 카테고리의 다른 글
[Git] 기존의 레포지토리를 commit까지 새로운 레포지토리로 복제하기: git —mirror (0) | 2023.11.01 |
---|---|
[Git] upstream: 개념, 사용 방법, 명령어, 주의사항 (0) | 2023.09.28 |
[GitHub] 깃허브에서 여러 사용자와 공동 커밋하는 방법: Co-Author 설정 (0) | 2023.07.13 |
[Git/GitHub] 깃허브 Organization를 통해 체계적인 협업 문화를 만들어보자! (0) | 2023.05.26 |