Git Submodule
마지막 업데이트
서브모듈은 하나의 Git 저장소를 특정 커밋에 고정하여 다른 저장소 안에 포함시킵니다. 부모 저장소는 자신이 의존하는 서브모듈의 커밋을 기록하므로 모두가 동일한 버전을 받습니다. 자체 저장소에 존재하는 공유 라이브러리나 컴포넌트를 코드를 복사하지 않고 포함시키는 방법입니다.
터미널 플레이그라운드에서 이것들을 사용해 보세요 - 브라우저 안의 실제 셸이며, 설치할 것이 없습니다.
구문
| Command | What it does |
|---|---|
git submodule add <url> libs/x | 저장소를 libs/x에 서브모듈로 추가 |
git clone --recurse-submodules <url> | 저장소와 그 서브모듈을 클론 |
git submodule update --init --recursive | 일반 클론 후 서브모듈을 초기화하고 가져오기 |
git submodule update --remote | 서브모듈을 최신 커밋으로 업데이트 |
git submodule status | 각 서브모듈의 커밋을 표시 |
일반적인 경우
| Goal | Command |
|---|---|
| 서브모듈을 사용하는 프로젝트 클론하기 | git clone --recurse-submodules <url> |
| 이미 클론한 후 서브모듈 가져오기 | git submodule update --init --recursive |
| 서브모듈을 최신으로 올리기 | git submodule update --remote |
git submodule 자주 묻는 질문
git submodule이란 무엇인가요?
서브모듈은 다른 Git 저장소 안에 고정된 커밋으로 중첩된 Git 저장소입니다. 부모 저장소는 서브모듈의 파일 대신 정확히 그 커밋을 가리키는 포인터를 저장하므로, 협업자들이 동일한 버전을 체크아웃합니다. 자체 저장소와 히스토리를 가진 의존성이나 공유 컴포넌트를 포함시키는 데 사용됩니다.
서브모듈이 있는 저장소를 어떻게 클론하나요?
git clone --recurse-submodules <url>를 사용하면 부모와 모든 서브모듈을 한 번에 클론할 수 있습니다. 그 플래그 없이 이미 클론했다면, 이후에 git submodule update --init --recursive를 실행하여 서브모듈 폴더를 채우세요.서브모듈을 최신 커밋으로 어떻게 업데이트하나요?
git submodule update --remote를 실행하면 각 서브모듈의 추적 브랜치를 가져와 최신 커밋으로 이동합니다. 그런 다음 부모 저장소에서 변경 사항을 커밋하세요. 부모는 어떤 서브모듈 커밋을 가리키는지 기록하므로, 그 포인터를 커밋하기 전까지는 업데이트가 저장되지 않습니다.클론 후 서브모듈 폴더가 왜 비어 있나요?
--recurse-submodules 없이 클론했기 때문에 Git이 폴더는 만들었지만 그 내용은 가져오지 않았기 때문입니다. 각 서브모듈을 초기화하고 다운로드하는 git submodule update --init --recursive로 해결하세요.이것을 온라인에서 연습할 수 있나요?
네. 터미널 플레이그라운드를 열어 브라우저 안의 실제 셸에서
git submodule을 실행하세요 - 설치할 것이 없습니다. Coddy의 무료 인터랙티브 Git 코스도 저장소 설정을 단계별로 다룹니다.