git-submodule

하나의 저장소에서 다른 저장소를 포함하고 관리할 수 있게 해주는 기능

주로 의존성 관리 및 외부 프로젝트 통합에 사용

어떻게 적용하는가

git submodule add {대상 레포지토리}

 

위 명령어 수행 시 github desktop에서 두가지 파일이 stage 되는것을 알 수 있다.

근데 git add랑 git stage랑 무엇이 다른걸까?

아래의 링크에서 볼 수 있듯이 똑같다고 한다. 이제 다음 스텝으로 가자

https://superuser.com/questions/1395627/differences-between-git-add-and-git-stage

gitmodules 파일에 아래의 내용이 추가 되었다.

[submodule "github-submodule-test"]
    path = github-submodule-test
    url = https://github.com/gogoadl/github-submodule-test.git

branch를 직접 지정해줄수도 있다고 한다.

또한 submodule을 추가 했던 레포지토리 자체의 변경사항도 있다고 나온다.

위 내용을 푸쉬하면 submodule이 등록된것을 확인 할 수 있다.

submodule 업데이트 반영

submodule을 포함하여 개발 중 submodule의 업데이트가 발생할 수 있다. 이를 반영하는 방법은 아래와 같다.

# .gitmodules 파일에 정의되어 있는 브랜치의 최신 버전으로 업데이트 (혹은 default 브랜치)
git submodule update --remote

역시나 다양한 케이스의 업데이트 방식을 지원하는 것 같다. 궁금하면 좀 더 찾아보자.

submodule 실제 활용 케이스 살펴보기

예전에 한글화에 기여했었던 서비스인 fxsound의 경우 서비스의 문자열 데이터를 저장하고 있는 Strings 레포지토리를 submodule로 관리하는 것을 알 수 있다.

현재 기여를 준비하고 있는 gihub가 주관하는 자격증의 시험 문제 덤프 서비스인 ghcertified에서도 .gitmodules로 서브모듈을 관리하고 있다. (이미지에 노란색으로 표시했다.)

이 프로젝트에서는 레포지토리 자체에서 submodule을 가지고 있지 않고, 필요할 때 submodule update를 통해 가져오도록 문서에서도 안내하고 있다.

마무리

submodule이 무엇인지, submodule을 어떻게 활용할 수 있는지 간단히 살펴보았다.

지금 당장 나에게 필요한 기능은 아니지만, 추후 필요할 때 사용할 수 있게끔 숙지해두자.

+ Recent posts