본문 바로가기
Sever/Tools

Git Submodule 활용

by seeker00 2025. 2. 26.

Submodule 이란

  • 하나의 Git 저장소(레포지토리) 내에 또 다른 Git 저장소를 하위 디렉토리로 통합해 넣는 것을 말합니다.
  • 저희 조는 .env 파일과 같은 민감정보를 편리하고 안전하게 공유하기 위해 private 레포지토리를 생성해 서브모듈로 등록해보았습니다.
  • git의 서브모듈은 하위 디렉터리 내에서 변경 사항이 발생해도 상위에서 바로 반영되지 않고, 서브 모듈 자체를 하나의 커밋 단위로서 관리합니다.
  • 서브 모듈에서 변경되었던 사항들이 추적되지 않고, 커밋 단위로 나타내지며 볼 수 없도록 되어 있습니다.

사용방법

서브모듈 세팅

git submodule add [repo-url] [path] # 현재 프로젝트 루트 디렉토리에서 submodule 등록
  • git submodule add 명령어를 수행하면 루트 경로에 .gitmodules 파일이 생성된 것을 확인할 수 있습니다.
  • # .gitmodules 파일 내용 [submodule "omp-private"] path = omp-private url = <https://github.com/I-Oteam/omp-private.git>

서브모듈 활용

  • 서브모듈 시작/업데이트
git submodule init # 서브모듈 시작
git submodule update --remote # 필요시 서브모듈 업데이트 수행
git submodule update --remote --merge # 로컬에서 작업 중인 부분과 원격에 작업된 부분이 다른 경우 머지까지 진행
  • 서브모듈 commit/push
cd submodule-dir
git add .
git commit -m "docs: example"
git push
cd ..

# submodule 커밋 변경사항 함께 메인 깃 레포지토리에 커밋/푸시
  • 서브모듈 상태 확인하기
git submodule status

빌드 시에 .env 파일 복사하기

# build.gradle 파일에 아래와 같은 task를 추가

task copyEnv(type: Copy) {
    copy {
        from './omp-private/.env'
        into './'
    }
}

github actions 에서 submodule 적용하기

# github-actions.yml 파일 

      - name: Checkout code
        uses: actions/checkout@v3
        with:
          token: ${{ secrets.ACTIONS_TOKEN }}
          submodules: true

참고 페이지