티스토리 뷰

CI_CD

Git Submodule이란?

ipxy 2025. 3. 20. 10:49
728x90

Git Submodule은 하나의 Git 레포지토리 내부에서 다른 독립된 Git 레포지토리를 연결하여 사용할 수 있도록 하는 기능입니다.
주로 외부 라이브러리나 공통 모듈을 별도의 레포지토리로 관리한 후 이를 포함하는 형태로 사용합니다.


🧩 Git Submodule의 사용 목적

  • 독립적으로 관리되는 외부 라이브러리, 프레임워크를 통합할 때 사용
  • 여러 프로젝트에서 공통으로 쓰는 모듈을 공유할 때 효율적
  • 개별적인 Git 히스토리와 독립적 관리 가능

🚩 Submodule의 동작 원리

  • 메인 레포지토리(parent repository)는 서브모듈의 특정 커밋 해시를 저장합니다.
  • 서브모듈은 별도의 독립적인 레포지토리로 존재하며, 메인 레포지토리는 이 레포지토리를 참조만 합니다.
  • 서브모듈을 업데이트하면, 메인 레포지토리에서도 업데이트된 커밋을 명시적으로 기록해주어야 반영됩니다.
Main Repo
├── README.md
└── src
    └── common-library (submodule)

🚀 Submodule 기본 사용법

1️⃣ Submodule 추가하기

git submodule add https://gitlab.example.com/your-library.git path/to/submodule
  • your-library.git: 서브모듈로 가져올 GitLab의 외부 레포지토리 URL
  • path/to/submodule: 서브모듈이 추가될 디렉터리 위치

예시:

git submodule add https://gitlab.example.com/libs/auth-lib.git libs/auth

2️⃣ 서브모듈 클론하기

메인 레포지토리 클론 시 서브모듈은 기본적으로 빈 상태로 클론됩니다. 명시적으로 아래 명령어를 실행하여 클론합니다.

git clone --recurse-submodules https://gitlab.example.com/main-project.git

또는 이미 클론한 레포지토리라면:

git submodule update --init --recursive

3️⃣ Submodule 최신 코드로 업데이트하기

서브모듈 내 코드를 최신 상태로 업데이트할 때는:

cd path/to/submodule
git checkout main # 또는 원하는 브랜치
git pull origin main

cd ../../ # 메인 레포로 이동
git add path/to/submodule
git commit -m "Update submodule to latest commit"
git push
  • 서브모듈을 업데이트하면 메인 레포에서 별도의 commit을 해야 합니다. (서브모듈의 commit hash 변경 기록)

📌 서브모듈 상태 확인하기

서브모듈 상태를 확인하려면 아래 명령어를 사용합니다.

git submodule status

출력 예시:

 e5f7c1a... path/to/submodule (heads/main)

🛠 서브모듈 제거하기

서브모듈을 제거할 때는 조금 복잡한 절차가 필요합니다.

예시:

git submodule deinit path/to/submodule
git rm path/to/submodule
rm -rf .git/modules/path/to/submodule
git commit -m "Removed submodule"

⚠️ Submodule 주의사항

  • 서브모듈은 특정 커밋을 참조하므로, 메인 레포지토리를 클론할 때 항상 최신 상태로 가져오지 않을 수 있습니다.
  • 여러 서브모듈을 관리하다 보면 관리 복잡성이 증가할 수 있습니다.
  • 서브모듈의 커밋이 변경되었을 때 반드시 메인 레포지토리에 변경 내역을 commit 해야 합니다.

🎯 Submodule 사용을 추천하는 상황

  • 여러 프로젝트 간 공통적으로 사용하는 공통 모듈을 별도 관리할 때
  • 외부 라이브러리를 독립적으로 관리 및 유지보수할 필요가 있을 때
  • 분리된 모듈로서 독립된 배포 및 개발이 필요할 때

이러한 방식으로 Git Submodule 기능을 효율적으로 활용할 수 있습니다.

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함