Git Submodule

zini9188·2023년 9월 28일
0

프로젝트

목록 보기
1/3

Git Submodule은 메인 레포지토리의 자식 레포지토리를 생성하여 관리하는 도구이다.

사용 이유

배포 과정에서 yml파일과 같은 민감 정보가 들어있는 파일들을 숨기기 위해 사용하려고 한다.

과정

private 레포지토리를 생성한다. 나는 팀 레포 내부에 추가했다.

여기에 application-dev.yml, application.yml, application-datasource.yml을 생성했다.

  • application.yml: dev(개발환경), prod(배포환경) yml을 설정하여 사용하기 위한 설정 파일
  • application-dev.yml: 개발 환경에서 사용할 yml 설정 파일
  • application-prod.yml: 배포 환경에서 사용할 yml 설정 파일 -> 추후 추가할 예정
  • application-datasource.yml: 데이터베이스 관련 yml 설정 파일

명령어를 이용하여 메인 레포지토리에 submodule을 추가한다.

git submodule add {submodule_repository_url}

서브모듈을 추가하면 .gitmodules 파일이 추가되는데,

[submodule "security"]
path = security
url = git@github.com:{부모레포}/{서브모듈레포}.git

위와 같은 형태이다. 이를 추가한 후 메인 레포에 push까지 해야 최종적으로 반영된다.

# .gitmodules, submodule의 레포 이름이 생겼는지 확인하기
git status

git add .
git commit -m "{message}"
git push {부모레포} {브랜치명}

submodule의 파일이 수정되는 경우

git submodule update --remote

주의할 점은 부모 레포에 적용을 위해서는 아래 명령어를 사용하여 적용해주어야 한다.

git submodule foreach git pull

git add .
git commit
git push

팀원의 프로젝트에 적용하는 방법

  1. 우선 프로젝트를 클론한다.
    git clone {레포주소}

  2. submodule을 초기화하고 업데이트한다. 이는 처음 한 번만 수행한다.

git submodule init

git submodule update
  • 한 번에 처리하는 방법
    git clone --recurse-submodules {레포주소}

  • submodule의 업데이트를 가져와야 하는 경우
    git submodule update --remote --merge

서브모듈의 파일 복사하기

processResources.dependsOn('copySecret')

tasks.register('copySecret', Copy) {
    from './security'
    include '*.yml'
    into 'src/main/resources'
}

from: submodule의 위치
include: 복사할 파일
into: 복사할 위치

Github Action에 submodule 등록하기

worksflow/gradle.yml에 아래의 내용을 추가하여야 한다.

- name: Checkout 
      uses: actions/checkout@v1
      with:
        token: ${{ secrets.ACTION_TOKEN }}
        submodules: true

profile - settings - Personal access tokens - Tokens에서 token을 발급받아 Secret에 추가해준다.

submodule commit 에러?

remote error: upload-pack: not our ref c6f1374ceeb49e14e78f0ca500a7

이러한 오류가 떴는데, 서브 모듈의 HEAD가 Detached 상태에서 업로드를 해서 그런 것 같다. 그래서 branch를 설정하고 push를 하라는 내용들이 많았다.

부모 폴더에서 아래 명령어를 사용하면

git submodule update

git submodule foreach git checkout main

서브모듈의 branch가 메인을 향하게 되는 것 같다

git submodule update --remote --merge

git add  

git commit -m 

git push origin

위 순서대로 명령어를 사용하니 잘 반영이 됐다.

= 1번은 체크를 안해봐서 필요여부를 모르겠음 =

나중에 같은 상황이 발생하면 더 정확하게 업로드하는것으로..

not found 에러

Submodule 'security' (https://github.com/{orgran}/security.git) registered for path 'security'
Cloning into 'C:/{...}/security'...
remote: Repository not found.
  • 클론 받는 과정에서 해당 submodule을 찾지 못하는 오류가 발생했다.

  • 인증 과정에서의 문제라는 것을 알 수 있었고, SSH를 이용하여 해결하였다.

  1. SSH 연결 과정을 진행하고 체크한다.
ssh -T git@github.com

# 예상 결과 : Hi {USER}! You've successfully authenticated, but GitHub does not provide shell access.

# 1-2. 해당 서브 모듈을 clone
git clone git@github.com:{organization}/security.git

# 서브모듈 업데이트
git submodule sync 
git submodule update --init --recursive 
  1. .gitmoudles 파일의 연결 주소를 HTTP로 변경해주고 HTTP 연결로 다시 진행해본다.
profile
똑같은 짓은 하지 말자

0개의 댓글

관련 채용 정보