티스토리 뷰

git

[Git] Git submodule 생성하기

AlgoRoot 2022. 12. 23. 16:02
반응형

안녕하세요 오늘은 하나의 레포지토리의 하위 폴더에 모듈을 생성하는 submodule 생성 법을 알아보고자 합니다. 

 

저의 경우 Study라는 강의, 공부 전용 레포지토리가 있는데요. 해당 레포지토리의 하위폴더에서 서브모듈을 생성해 보겠습니다.

 


 

1. 기존 레포지토리 디렉터리로 터미널 접속

 

2. 서브모듈 생성

git submodule add https://github.com/[사용자 아이디]/[자식 저장소 명]. git [디렉터리 명]
eg. git submodule add https://github.com/AlgoRoots/tdd-unit-basic.git TDD-UNIT-BASIC

 

이 작업을 수행하면. gitmodules 파일이 생성되고. git/. config 파일에 서브모듈 관련 내용이 추가됩니다.

이 파일은 서브디렉토리와 하위 프로젝트 URL의 매핑 정보를 담은 설정파일로 어떤 서브모듈 프로젝트가 있는지 알 수 있는 파일입니다.
서브모듈 개수만큼 이 항목이 생기며. 이 파일도 .gitignore 파일처럼 버전을 관리합니다.

 

 

 

3. Status 확인 후 Commit and Push

git commit -m "Add submodule tdd-unit-basic"
git push

 


 

서브모듈 포함한 프로젝트 Clone

서브모듈이 포함된 프로젝트를 클론 하면 해당 디렉터리가 비어 있습니다. 서브 모듈의 내용을 가져오려면 아래 명령어를 입력합니다. 

git submodule init
git submodule udpate

한 번에 서버모듈까지 가져오려면 clone 뒤에 --recurse-submodules 옵션을 붙이면 됩니다. 

 


삭제

  1. . gitmoudules파일을 열어 관련 서브모듈 내용을 삭제
  2. . git/config파일을 열어서 관련 서브모듈 내용을 삭제
  3. git rm --cached <서브모듈폴더>
  4. commit

 

커밋 반영과정

case 1. 부모 프로젝트에서 자식프로젝트 내용 변경 후 반영 

1. 서브모듈 생성한 디렉터리에 들어가는 순간 해당 레포로 바뀝니다. git log로 commit 내역 조회해 보면 서브레포 커밋과 같습니다.

2. 서브레포에서 새로운 커밋 생성

git commit --allow-empty -m "Add new commit" 

3. 커밋 내역 확인 

git log --pretty=short -1

4. 부모 레포지토리로 가서 상태확인 

git status & git diff

5. 부모 레포에서 자식레포가 변경되었다는 커밋 생성

git commit -am "update submodule"

6. 자식레포에서 로컬 커밋 원격 레포에 반영

git push origin main

7. 필요하다면 부모레포경로에서도 반영 

[부모 레포 경로에서] git push origin main

 

 

 


Reference

Git- 서브모듈

Git- 서브모듈 이해하기

Git- 서브모듈 이해하기

 

 

 

 

반응형