디자인 시스템 구축(1) - Git submodule (feat. Storybook)

신혜린·2024년 7월 5일

참고내용
Git 도구 - 서브모듈
Git Submodule을 사용해보자
submodule: 코드는 공개하고 싶은데, 전부는 좀...

Git submodule 기능을 이용하여 Storybook기존 프로젝트 레포를 합쳐보기 위해 git submodule에 대해 알아보기로 했다.


서브 모듈(Sub module)이란?

프로젝트를 수행하다 보면, 다른 프로젝트를 함께 사용해야 하는 경우가 종종 있다.

ex) 내부의 여러 프로젝트에서 공통으로 사용하는 라이브러리

-> 두 프로젝트를 별개로 다루면서도 그 중 하나를 다른 하나에서 사용할 수 있어야 하는 경우

Git Submodule은 이런 문제를 다루기 위한 도구로, Git 저자소 안에 다른 Git 저장소를 디렉토리로 분리해 넣는 것이다.
다른 독립된 Git 저장소를 Clone 해서 내 Git 저장소 안에 포함할 수 있으며, 각 저장소의 커밋은 독립적으로 관리한다.

서브 모듈 적용하기

  1. Main 프로젝트와 Sub 프로젝트 repository를 각각 생성한다.
  2. Local Main 디렉토리 속 원하는 위치에 서브 모듈을 추가한다.
    $ git submodule add [sub repository url] [submodule-name]
  3. Remote Main 에 Push 해서 반영한다.

서브 모듈 수정하기

1. 메인 프로젝트 속 서브 모듈 디렉토리에서 수정

  1. Local Mainsubmodule 위치에서 새로운 파일을 추가하거나 수정한다.
    • submodule 에서 push 하면 Remote Sub 의 해당 브랜치가 업데이트 된다.
  2. Local Main 상단에서 submodule 의 업데이트 내역을 커밋한다.
  3. Remote Mainpush 한다.
    • Remote Main, Local Main, Remote Sub 모두 (나)를 가리키게 된다.

이 방식으로는 Local Sub 에 영향을 못 미치기 때문에 업데이트를 하기 위해선 git pull 명령어를 실행해줘야 한다.


2. 서브 프로젝트 디렉토리에서 추가한 후 메인 프로젝트에서 수정

  1. Local Sub 에서 새로운 파일을 추가하거나 수정한다.
    • Remote Sub 의 해당 브랜치가 업데이트 된다.
  2. Local Mainsubmodule 로 이동하여 pull 한다.
  3. Local Main 상단에서 submodule 의 업데이트 내역을 커밋한다.
  4. Remote Mainpush 한다.
    • Remote Main, Local Main, Remote Sub. Local Sub 모두 (나)를 가리키게 된다.

서브모듈이 있는 프로젝트 clone 하기

  1. submodule을 포함한 프로젝트를 클론한다.
    • 현 상태에서 submodule 디렉토리는 존재하지만 비어있는 상태
  2. submodule을 초기화 한다.
    git submodule init
  3. Local Main 디렉토리에서 submodule의 업데이트 내역을 커밋한다.
    git submodule update
    - 프로젝트 속 Local Submodule 과 대상 커밋은 동일한 상태가 된다.

git clone --recurse-submodule 주소

  • 해당 명령어는 1-3 단계를 한 번에 시행해주며, 클론 시 서브 모듈을 자동으로 초기화하고 업데이트까지 해준다.

(참고) 이 상태에서 submodule 수정을 원한다면 Detached HEAD 상태 관련해서 알아볼 것!

profile
개 발자국 🐾

0개의 댓글