본문 바로가기
Git

Git Submodule

by clearinging 2021. 6. 26.
반응형

Git Submoduel 정의

  • 하나의 Git repo와 완벽히 분리된 Git repo를 연결하고, 하위에 두는 것
  • clone을 받을때 같이 받고 관리할 수 있게 만든 기능

Submodule 설정

Submodule로 설정할 repo 를 먼저 생성

하위 모듈 생성

  • 하위 repo에 원하는 파일을 push를 해주시면됩니다.
  • 현제 예시는 spring cloud 에서 config파일을 모아두는 repo입니다.

상위 repo를 생성

상위 모듈 생성

  • 상위 모듈 repo에서 하위 모듈 추가
git submodule add {moudle.url} {module.name}
  • .gitmodule 파일 생성해서 아래와 같이 구성 되게 됩니다.
[submodule "{submodule.name}"]
    path = {root.repo.submodule.name}
    url = {git.repo.url}
  • root module이 push를 하게 되면 아래와 같이 현재 submodule의 git commit hash값이 같이 나오게 되어서 버전 정보를 확인 가능합니다.
    submodule 추가 결과

submodule pull

  • git submodule update 명령어 호출 -> 현재 root repo에 마지막으로 등록된 submodule의 정보를 가져온다.
    • root repo 의 submodule commit log : B, C, D
    • submodule repo commit log : A, B, C, D
    • 위와 같은 예시인 경우 B상태를 pull로 받아 온다
  • submodule안에 submodule이 존재하는 경우 : git submodule update --recursive
  • 현재 root repo가 아닌 실제 submodule repo의 최신 버전(예시 : A commit log)을 받고 싶을때는 아래와 같은 명령어를 사용해야 한다.
git submodule update --remote
git submodule update --remote --recursive

clone

  • root repo를 clone하게 되면 submodule은 비어있는 dir로 형태로 clone이 됩니다.
    • 이유 : 임시로 clone을 하게되면 불필요한 submodule모두 clone이 되는 이슈 발생
  • submodule 의 저장소 정보를 서택적으로 가져올때 사용
git submodule init {module.name}
  • submodule 의 저장소 정보를 전체 다 가져오는 경우
git submodule init
  • submodule의 repo에서 file들을 아래 명령어를 통해서 pull해서 가져온다.
git submodule update

submodule 상태 확인

git submodule summary

모든 submodule에 동일한 명령어 접목

  • 예시 : 모든 submodule의 git log를 보고 싶다.
git submodule foreach {command}
git submodule foreach git log --oneline
반응형