Git submodule 사용해서 yml 파일 관리하기

NCOOKIE·2023년 11월 6일
0

개요

스프링 프로젝트의 .gitignore에 등록되어 있는 *.yml 파일들을 버전관리하기 위해서 git의 submodule이라는 것을 사용하게 되었다.

Git의 Submodule이란 "Git 저장소 (메인 저장소) 안에 다른 Git 저장소 (서브 저장소 - 재사용 및 공유 가능한 공통 "모듈"들을 주로 의미) 를 디렉토리로 분리해 넣는 것"이다.

이 때 메인 저장소와 서브 저장소의 커밋들은 동기화되지 않으며, 별도로 관리하게 된다.

사용하기

현재 구조

resources 디렉터리에 application.yml 파일이 있다.

spring:
  profiles:
    active: aws

그리고 같은 디렉터리에 실질적인 설정 데이터를 가지고 있는 application-local.yml, application-aws.yml이 있어 원하는 profile에 맞게 프로젝트에 적용할 수 있다. 이 두 파일을 git submodule에서 관리하고 싶기 때문에 별도의 디렉터리를 만들고, 스프링 프로젝트에서 이를 인식할 수 있게 해야한다.

build.gradle

sourceSets {
	main {
		resources{
			srcDirs "src/main/resources", "src/main/resources/profile"
		}
	}
}

build.gradle에 이렇게 추가해주면 프로젝트는 실행될 때 src/main/resources, src/main/resources/profile에서 properties 또는 yml 파일을 찾는다.

submodule

먼저 submodule의 저장소를 github에 private으로 만들어 주고, 해당 저장소를 원하는 경로에 submodule로 추가했다.

imad-server/src/main/resources$ git submodule add {repo-url} profile

위와 같이 명령어를 입력하면 현재 경로에서 profile이라는 디렉터리를 생성하고 거기에 저장소를 clone 한다. 프로젝트 루트에 .gitmodules라는 파일이 생기는데 내용은 다음과 같다.

[submodule "src/main/resources/profile"]
	path = src/main/resources/profile
	url = {repo-url}

특이하게 submodule로 생성된 디렉터리는 일반적인 디렉터리가 아니라 파일로 관리된다. 그렇기 때문에 기존에 있던 git에서는 해당 디렉터리 내의 변화를 트래킹할 수 없다.

참고링크

profile
일단 해보자

0개의 댓글