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

위는 현재 프로젝트의 폴더 구조이다.
이전에 포스팅한 Spring과 React 한번에 빌드해서 실행하는 프로젝트에 기반한 구조의 프로젝트다
전체적으로 스프링 프로젝트이고, src/main/webapp에 리액트 프로젝트가 들어가 있다.
이것을 전체적인 Spring 프로젝트로 -backend 레포지터리 하나와 그 속에 레포지터리로 -frontend 레포지터리를 하나 만들어 독립적으로 개발하고 관리할 수 있도록 하려고 한다.
그리고 이 개념이 Git에서 Submodule이다!
이미 프로젝트 개발이 되고 있는 상태에서 서브 모듈을 나누는 법을 정리해보았다.
아까 구조에서는 src/main/webapp에 해당한다.
git init
git add *
git commit -m "first commit"
git remote add origin [submodlue에 해당하는 깃허브 레포]
git push origin master
깃허브 레포에 올라간 것을 확인하고, src/main/webapp를 삭제한다.
불안하다면 백업해놓자.
아까 git bash 창이 아닌 프로젝트 root 폴더에서 진행한다.
git submodule add [submodlue에 해당하는 깃허브 레포] [프로젝트 내 서브 모듈이 들어갈 경로]
fatal: '서브 모듈 경로' already exist in the index
해당 폴더에 캐시가 남아있어서 그렇다.
다음 명령어로 캐시를 지워주고 다시 시도하자.git rm --cached -r [서브 모듈 경로]


루프 폴더에 .gitmodules 파일이 새로 생기고, 설정했던 서브 모듈 폴더 안에 리액트 프로젝트가 들어와 있는 것을 확인할 수 있다!
프로젝트 루트 폴더에서 다음 단계로 깃허브에 올린다.
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를 켜고 입력하면 된다!