Git Submodule 사용법
Git Submodule 사용법
Git Submodule을 사용하는 이유
Git Submodule은 프로젝트 내에서 또 다른 Git 리포지토리를 독립적으로 포함하고 관리할 수 있는 기능입니다. 이를 통해 하나의 메인 프로젝트에서 다른 리포지토리를 모듈처럼 불러와 사용하는 방식으로, 주로 외부 라이브러리나 공통 모듈을 관리할 때 유용합니다.
1. 독립적인 버전 관리
Git Submodule
을 사용하면 서브모듈로 포함된 리포지토리의 독립적인 버전 관리를 할 수 있습니다. 메인 프로젝트와 서브모듈은 각자의 Git 히스토리를 유지하므로, 서브모듈의 버전을 원하는 시점에 고정하거나 별도로 관리할 수 있습니다. 이렇게 하면 서브모듈이 메인 프로젝트와 분리되어 있더라도, 특정 버전에 맞춰 안정적인 상태를 유지할 수 있습니다.
2. 재사용 가능한 코드 관리
서브모듈은 외부 라이브러리나 공통 모듈을 메인 프로젝트에 쉽게 추가할 수 있는 방법입니다. 동일한 서브모듈을 여러 프로젝트에서 재사용하면서, 한 곳에서 관리하고 업데이트하면 모든 관련 프로젝트에 반영할 수 있습니다.
3. 경량화된 코드베이스 유지
서브모듈은 외부 프로젝트나 라이브러리를 단순히 복사해오는 것이 아니라, 해당 프로젝트의 특정 커밋을 참조하는 방식입니다. 이로 인해 메인 프로젝트에 직접적인 코드 복사본을 두지 않고도 참조할 수 있으므로 코드베이스를 가볍게 유지할 수 있습니다.
Git Submodule 사용 방법
1. 서브모듈 추가
메인 프로젝트에 서브모듈을 추가하려면 git submodule add
명령어를 사용합니다. 다음은 서브모듈로 추가하고자 하는 리포지토리의 URL을 입력하여 실행하는 방법입니다.
git submodule add https://github.com/username/repository.git path/to/submodule
repository.git
: 서브모듈로 추가할 Git 리포지토리의 URLpath/to/submodule
: 메인 프로젝트 내에서 서브모듈을 저장할 경로
Git 구조 시각화 (서브모듈 추가 후)
Main Project
├── .gitmodules # 서브모듈 정보가 저장됨
├── submodule/ # 서브모듈이 저장된 디렉토리
│ └── (submodule files)
이 명령어를 실행하면 .gitmodules
파일이 생성되고, 여기에 서브모듈 정보가 저장됩니다. 또한 서브모듈이 설정된 디렉토리에 서브모듈의 파일이 클론됩니다.
2. 서브모듈 클론
서브모듈을 포함한 프로젝트를 처음 클론할 경우, git clone
만으로는 서브모듈이 함께 클론되지 않습니다. 따라서 서브모듈도 함께 클론하려면 다음 명령어를 실행해야 합니다.
git clone --recurse-submodules https://github.com/username/main-project.git
만약 서브모듈을 클론하지 않고 기존 프로젝트를 가져왔다면, 다음 명령어로 서브모듈을 초기화하고 클론할 수 있습니다.
git submodule update --init
3. 서브모듈 업데이트
서브모듈에 대한 업데이트가 있을 경우, 메인 프로젝트에서 서브모듈을 최신 상태로 동기화하려면 다음 명령어를 사용합니다.
git submodule update --remote
이 명령어는 서브모듈의 최신 커밋을 가져오고, 메인 프로젝트에서 이를 반영합니다.
Git 구조 시각화 (서브모듈 업데이트 후)
Main Project
├── .gitmodules # 서브모듈 정보가 유지됨
├── submodule/ # 서브모듈의 최신 버전이 반영됨
│ └── (updated submodule files)
서브모듈이 독립적으로 업데이트되고, 메인 프로젝트는 이를 참조하는 방식으로 동작합니다.
4. 서브모듈 삭제
서브모듈을 메인 프로젝트에서 제거하려면 다음과 같은 과정을 거쳐야 합니다.
.gitmodules
파일에서 해당 서브모듈에 대한 정보를 제거합니다.git config -f .git/config --remove-section submodule.path/to/submodule
명령어로 서브모듈 설정을 삭제합니다.git rm --cached path/to/submodule
명령어로 서브모듈 디렉토리를 인덱스에서 제거합니다.- 서브모듈 디렉토리를 삭제합니다.
git rm --cached path/to/submodule
rm -rf path/to/submodule