본문 바로가기
개발 이모저모/TIL

Git Submodule

by 코헤0121 2026. 1. 22.
728x90
반응형

한 줄 요약

레포 안에 다른 레포를 링크로 연결하는 것

왜 필요해?

나의 상황:

  • CodingTestStudy 레포 = 메인 프로젝트 (백준허브)
  • leetCode 레포 = LeetHub가 자동으로 푸시하는 곳

이 둘을 연결하고 싶은데, 그냥 복사하면?

  • LeetHub가 푸시할 때마다 수동으로 복사해야 함
  • 두 곳에 같은 파일이 중복됨

Submodule을 쓰면?

  • leetCode 폴더가 실제 파일이 아니라 "링크"가 됨
  • LeetHub가 leetCode 레포에 푸시하면, 링크만 업데이트하면 끝

비유로 이해하기

일반 폴더: 책을 복사해서 내 방에 둠 (원본 바뀌면 다시 복사해야 함)
Submodule: 도서관 책에 북마크 꽂아둠 (원본 바뀌어도 북마크만 업데이트)

자주 쓰는 명령어

처음 submodule 추가할 때

git submodule add <레포URL> <폴더명>
git commit -m "Add submodule"

다른 PC에서 clone할 때

# 방법 1: clone할 때 같이 가져오기
git clone --recursive <레포URL>

# 방법 2: clone 후에 가져오기
git clone <레포URL>
git submodule init
git submodule update

submodule 최신 버전으로 업데이트

git submodule update --remote
git add <폴더명>
git commit -m "Update submodule"

주의할 점

  1. clone할 때 --recursive 잊지 말기

    • 안 하면 submodule 폴더가 비어있음
  2. submodule 안에서 작업하지 말기

    • submodule은 읽기 전용처럼 생각하기
    • 수정은 원본 레포에서!
  3. submodule 업데이트 후 커밋 필요

    • git submodule update --remote 후에
    • 메인 레포에서도 커밋해야 반영됨

내 프로젝트 구조

CodingTestStudy/          <- 메인 레포
├── leetCode/             <- submodule (링크)
│   └── (LeetHub가 관리)
├── 백준/
└── example/

.gitmodules 파일에 submodule 정보가 저장됨:

[submodule "leetCode"]
    path = leetCode
    url = https://github.com/CheHyeonYeong/leetCode.git
728x90
반응형