Git 서브모듈

고급 Git

Amanda Crawford-Adamo

Software and Data Engineer

Git 서브모듈이란?

Git 서브모듈

git submodule
  • 다른 리포지토리 안에 중첩된 리포지토리
  • 별도 버전 관리 및 이력
  • 서브모듈 변경은 메인 리포지토리에 영향 없음
  • 메인 리포지토리는 서브모듈의 특정 버전을 참조 가능

여러 리포지토리를 포함한 리포지토리의 예시.

고급 Git

서브모듈 추가

경로 폴더 아래에 링크나 디렉터리로 서브모듈을 추가합니다.

git submodule add <repository link|dir> <path>

$$

예시

ETL 리포의 libs/validator 폴더에 데이터 검증 라이브러리를 추가합니다.

git submodule add https://github.com/example/data-validator.git libs/validator
고급 Git

서브모듈 목록 보기

프로젝트의 모든 서브모듈 나열

git submodule status

예시

$ git submodule status
e1f2...7w8x9 data_cleaning_lib
a1b2...q7r8 api_connector
d9e8...t3u2 visualization_toolkit
고급 Git

서브모듈 업데이트

서브모듈을 최신 상태로 업데이트

옵션은 다음과 같습니다:

  1. 소스 코드가 로컬에 있는 모든 서브모듈 업데이트.
    git submodule update --init 
    
  2. 소스 코드가 원격 리포지토리에 있는 모든 서브모듈 업데이트.
    git submodule update --init --remote 
    
  3. 특정 서브모듈만 업데이트.
    git submodule update --init <path_to_submodule>
    
고급 Git

서브모듈 제거

서브모듈 제거 절차

  1. 서브모듈 비활성화.
    git submodule deinit <submodule_name>
    
  2. Git 인덱스에서 서브모듈 제거.
    git rm <path>
    
고급 Git

대형 리포지토리에서 서브모듈 추출

  1. 새 서브모듈 저장소에 넣을 파일을 리포지토리 밖의 다른 폴더로 복사합니다.

  2. 새 폴더에서 서브모듈용 새 저장소를 만듭니다:

    git init <new-submodule>
    
  3. 메인 프로젝트에서 관련 파일과 기록을 추출하려면 git filter-repo를 사용합니다:

    git filter-repo --path <extract_path> --invert-paths
    
  4. 추출한 저장소를 메인 프로젝트에 서브모듈로 추가합니다:

    git submodule add <new-submodule_path> <path_to_store_submodule>
    
고급 Git

서브모듈 사용 시기와 모범 사례

사용 사례:

  1. 외부 라이브러리 관리
  2. 프로젝트 간 코드 공유
  3. 의존성 버전 고정 관리

모범 사례:

  1. 서브모듈을 최신 상태로 유지
  2. 상대 경로 사용
  3. 변경 사항을 팀과 공유
고급 Git

실습해 봅시다!

고급 Git

Preparing Video For Download...