Git Submodule

 

Remarks

본 글은 https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%EC%84%9C%EB%B8%8C%EB%AA%A8%EB%93%88을 참고하여 작성되었습니다.


Repository 안에 다른 repository를 넣고 version 관리를 따로 하고 싶은 경우, submodule 기능을 사용할 수 있다.
이중으로 관리가 복잡해지기 때문에 적절한 상황에 적절하게 사용하도록 하자.

0. Summary

$ git config alias.supdate 'submodule update --remote --merge'
$ git config alias.spush 'push --recurse-submodules=on-demand'

$ cd submodule     # sub   module
$ git add, commit  # sub   module

$ cd ..            # super module
$ git supdate      # super module
$ git add, commit  # super module
$ git spush        # super module

1. Submodule 추가

$ git submodule add https://github.com/chaconinc/DbConnector
$ git commit -am 'added DBConnector module'
$ git push origin main

2. Submodule을 포함하는 프로젝트 clone

$ git clone --recurse-submodules https://github.com/chaconinc/MainProject

3. Submodule 관리

Submodule 내부에서 add, commit, push 등을 사용하는 방식도 사용할 수 있으나,
상위 module과의 호환성 유지를 위해 다음의 명령어들을 사용하는 것이 좋다.

3.1 Submodule update

다음과 같이 모든 submodule을 업데이트할 수 있다.

$ git submodule update --remote --merge

3.2 Submodule push

상위 directory로 나와 로컬 변경사항(submodule에서 add, commit된 내용)을 업데이트한 다음,
Upstream repo로 push한다.

$ git submodule update --remote --rebase
$ git push --recurse-submodules=on-demand

4. Alias 생성

자주 사용하는 명령어들을 alias로 만들어 놓으면 편하다.

$ git config alias.sdiff '!'"git diff && git submodule foreach 'git diff'"
$ git config alias.supdate 'submodule update --remote --merge'
$ git config alias.spush 'push --recurse-submodules=on-demand'
$ git config alias.srebase 'submodule update --remote --rebase'