ᐧ༚̮ᐧ Data Science | AI

Git 서브모듈 (submodule) 사용하기

Letter_B 2024. 11. 22. 14:41
728x90
반응형

 

 

 

서브모듈 (submodule)

Git 서브모듈은 하나의 Git 저장소 안에 다른 Git 저장소를 포함하고 관리할 수 있도록 해주는 기능이다. 주로 독립적으로 관리되는 코드를 포함하거나, 여러 프로젝트에서 공통적으로 사용하는 구성 요소를 공유해야 할 때 사용된다.

서브모듈은 별도의 Git 저장소로 관리되며, 상위 저장소와 독립적으로 커밋 및 브랜치를 유지합니다. 즉, 서브모듈의 변경 사항은 상위 저장소의 변경 이력(히스토리)에 직접 영향을 미치지 않는다.

 

🔖 저장소 Repository: 프로젝트 파일과 변경 이력을 관리하는 Git의 기본 단위. 로컬(내 컴퓨터)이나 원격(GitHub 등)에 저장될 수 있다.

🔖 모듈 Module: 특정 기능이나 역할을 수행하는 프로젝트의 논리적 구성 요소

 

 

 

나 같은 경우, 내 프로젝트랑 연관 있는 foundation 모델을 서브모듈로 내 프로젝트에 포함했다. 이 서브모듈은 모델의 주요 코드가 포함되어 있고 나는 내 프로젝트 디렉터리에서 다양한 실험을 해볼 예정이다.

아래 깃허브를 보면 서브모듈은 일반 디렉터리처럼 보이지만, 클릭하면 서브모듈의 별도 저장소 URL로 연결된다.

 

깃허브에 서브모듈

 

 

 

서브모듈의 특징

  1. 독립적인 관리: 서브모듈은 독립된 저장소로 유지되며, 상위 저장소와 별도로 히스토리와 브랜치를 관리한다.
  2. 코드 재사용: 공통적으로 사용되는 코드베이스를 공유할 때 중복을 줄인다.
  3. 모듈화: 프로젝트를 더 작은 단위로 분리하여 관리하기 좋다.

 

 

예제

예를 들어, 데이터 과학 팀이 ProjectAProjectB 두 개의 프로젝트를 진행하고 있는데, 이 프로젝트들이 공통적으로 데이터를 전처리하는 코드를 사용한다. 이 데이터 전처리 코드, data_preprocessing, 은 다른 팀에서도 사용하기 때문에 별도의 Git 저장소로 관리한다.

 

ProjectA, ProjectB는 각각 독립된 프로젝트로 공통된 코드(data_preprocessing)를 직접 복사하지 않고 서브모듈로 포함하여 의존성을 관리합니다.

 

디렉터리 구조:

data_preprocessing/
    ├── preprocessing.py
    ├── visualization.py
ProjectA/
    ├── .gitmodules
    ├── data_preprocessing/  (서브모듈)
    ├── project_a_model.py
ProjectB/
    ├── .gitmodules
    ├── data_preprocessing/  (서브모듈)
    ├── project_b_analysis.py

 

각 프로젝트에서 data_preprocessing을 서브모듈로 추가를 하여 동일한 코드를 두 프로젝트마다 복사하지 않아도 된다. data_preprocessing 저장소에서 코드를 업데이트하면, ProjectA와 ProjectB에서도 이를 가져와 사용할 수 있다.

 


Git 명령어 정리

 

서브모듈 추가

특정 저장소를 서브모듈로 추가하기

git submodule add <URL> <경로>

 

  • URL: 추가할 서브모듈의 Git 저장소 URL
  • 경로: 서브모듈을 배치할 디렉터리 (기본적으로 저장소 이름이 사용됨)

 

서브모듈 초기화 및 업데이트

서브모듈을 처음 설정하거나, 다른 사람이 추가한 서브모듈을 로컬에서 사용하려면 아래 두 명령어를 실행해야 한다.

git submodule init
git submodule update

 

 

 

서브모듈 최신 버전으로 업데이트

서브모듈의 원격 저장소에서 최신 버전을 가져오기

git submodule update --remote

 

서브모듈 상태 확인

 

서브모듈들의 현재 상태를 확인

git submodule status

 

 

서브모듈 제거

서브모듈을 삭제하려면 몇 가지 단계를 거칩니다:

  1. 서브모듈 디렉터리와 관련 설정 삭제
  2. Git에서 서브모듈 경로를 제거
rm -rf <서브모듈 디렉토리> .git/modules/<서브모듈>
git rm --cached <서브모듈 경로>

 

728x90
반응형