반응형
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 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
반응형