[git] Submodule 사용하기: 레포지터리 속의 레포지터리 만들기

허지예·2023년 4월 8일

Submodule을 사용해서 Backend 레포지터리와 Frontend 레포지터리를 분리하려고 한다!

위는 현재 프로젝트의 폴더 구조이다.
이전에 포스팅한 Spring과 React 한번에 빌드해서 실행하는 프로젝트에 기반한 구조의 프로젝트다

전체적으로 스프링 프로젝트이고, src/main/webapp에 리액트 프로젝트가 들어가 있다.

이것을 전체적인 Spring 프로젝트로 -backend 레포지터리 하나와 그 속에 레포지터리로 -frontend 레포지터리를 하나 만들어 독립적으로 개발하고 관리할 수 있도록 하려고 한다.

그리고 이 개념이 Git에서 Submodule이다!


이미 프로젝트 개발이 되고 있는 상태에서 서브 모듈을 나누는 법을 정리해보았다.

서브 모듈 생성하는 방법

1. 서브 모듈에 해당하는 폴더를 먼저 깃허브 레포에 올려준다.

아까 구조에서는 src/main/webapp에 해당한다.

git init
git add *
git commit -m "first commit"
git remote add origin [submodlue에 해당하는 깃허브 레포]
git push origin master

2. 메인 프로젝트에서 서브 모듈에 해당하는 폴더를 삭제해준다.

깃허브 레포에 올라간 것을 확인하고, src/main/webapp를 삭제한다.
불안하다면 백업해놓자.


3. 메인 프로젝트에서 서브 모듈을 연결해준다.

아까 git bash 창이 아닌 프로젝트 root 폴더에서 진행한다.

git submodule add [submodlue에 해당하는 깃허브 레포] [프로젝트 내 서브 모듈이 들어갈 경로]

fatal: '서브 모듈 경로' already exist in the index

해당 폴더에 캐시가 남아있어서 그렇다.
다음 명령어로 캐시를 지워주고 다시 시도하자.

git rm --cached -r [서브 모듈 경로]


루프 폴더에 .gitmodules 파일이 새로 생기고, 설정했던 서브 모듈 폴더 안에 리액트 프로젝트가 들어와 있는 것을 확인할 수 있다!


4. 메인 레포지터리 깃허브 레포에 올리기

프로젝트 루트 폴더에서 다음 단계로 깃허브에 올린다.

git init
git add *
git commit -m "first commit"
git remote add origin [메인 레포지터리에 해당하는 깃허브 레포]
git push origin master

그럼 다음과 같이 깃허브에서 메인 레포지터리에 있는 서브 모듈 폴더를 클릭하면 서브 모듈의 깃허브 레포지터리로 이동된다!


서브 모듈 사용하는 방법

  • git submodule init: 서브모듈 정보를 기반으로 로컬 환경설정 파일을 준비하고 초기화 한다.

  • git submodule update: 서브 모듈의 원격 저장소에 데이터를 가져온다.

다른 깃허브 명령어는 서브 모듈 폴더에서 git bash를 켜고 입력하면 된다!

profile
대학생에서 취준생으로 진화했다가 지금은 풀스택 개발자로 2차 진화함

0개의 댓글