반응형
Git Submodule과 Git Subtree 이해하기
Git을 사용하다 보면 프로젝트 안에서 다른 Git 저장소(Repository)를 관리해야 할 때가 있습니다. 이때 유용하게 쓸 수 있는 두 가지 방법이 바로 Git Submodule과 Git Subtree입니다.
Git Submodule
Git Submodule 이란?
Git Submodule은 Git 저장소 안에 다른 별도의 저장소를 하위 모듈(서브모듈)로 포함시키는 방식입니다. 메인 프로젝트에서 별도의 독립된 프로젝트를 참조하여 사용하는 개념으로 생각하면 쉽습니다.
- 언제 사용하면 좋을까?
- 여러 프로젝트에서 공통으로 사용되는 라이브러리나 모듈을 별도의 저장소로 분리 하여 관리하고 싶을 때 유용합니다.
- 독립적인 개발 주기와 릴리즈를 가진 모듈을 유지보수하고자 할 때 적합합니다.
Git Submodule의 장점
- 하위 모듈의 개발과 배포를 독립적으로 수행할 수 있습니다.
- 각 모듈을 독립적으로 관리할 수 있어 유지보수가 쉽다.
- 다른 저장소의 변경사항을 명확히 추적할 수 있다.
- 메인 프로젝트에서 정확히 어떤 버전의 서브모듈이 사용되는지 명시적으로 관리할 수 있습니다.
- 변경 사항이 명확히 기록되어 관리가 용이합니다.
Git Submodule의 단점
- 서브모듈의 변경사항이 있을 때마다 명시적으로 별도의 명령어를 실행하여 업데이트를 해줘야 합니다.
- 처음 사용하는 개발자는 조금 복잡하다고 느낄 수 있다.
- 메인 프로젝트와 서브모듈 간의 동기화 작업이 추가로 필요합니다.
주요 명령어
# 서브모듈 추가하기
git submodule add <저장소 URL>
# 서브모듈과 함께 프로젝트 클론하기
git clone --recurse-submodules <프로젝트 URL>
# 서브모듈 변경사항 가져오기 및 업데이트하기
git submodule update --remote
# 모든 서브모듈 초기화 및 업데이트하기
git submodule update --init --recursive
반응형
Git Subtree
Git Subtree 란?
Git Subtree는 다른 저장소의 내용을 내 프로젝트의 특정 하위 폴더로 가져와 히스토리까지 통합하여 관리하는 방식입니다. 간단히 말해, 다른 저장소를 내 프로젝트의 일부로 직접 병합한다고 생각하면 됩니다.
- 언제 사용하면 좋을까?
- 독립적인 프로젝트를 내 프로젝트로 완전히 흡수하여, 한 번에 관리하고 싶을 떄 적합합니다.
- 하위 프로젝트의 히스토리를 함께 관리하는 것이 중요한 경우에 유용합니다.
Git Subtree의 장점
- 모든 변경사항과 히스토리가 메인 프로젝트에 통합되어 관리가 간단합니다.
- 별도의 서브모듈 명령어 없이 일반 Git 명령어로 관리할 수 있어 초보자에게 친숙합니다.
- 하위 프로젝트를 독립적으로 복사하거나 추출할 수 있는 유연성을 제공합니다.
Git Subtree의 단점
- 하위 프로젝트의 모든 히스토리가 내 프로젝트 히스토리와 합쳐지기 때문에 저장소 크기가 저킬 수 있습니다.
- 변경사항이 많은 경우, 병합 과정에서 충돌(conflict)이 발생할 수 있습니다.
- 하위 프로젝트를 빈번하게 업데이트해야 할 경우 번거로울 수 있습니다.
주요 명령어
# Subtree로 다른 저장소 추가하기
git subtree add --prefix=<폴더명> <저장소 URL> <브랜치명>
# Subtree 최신 변경사항 병합하기
git subtree pull --prefix=<폴더명> <저장소 URL> <브랜치명>
# Subtree로 변경사항 보내기
git subtree push --prefix=<폴더명> <저장소 URL> <브랜치명>
728x90
결론
구분 | Git Submodule | Git Subtree |
방식 | 독립적인 별도 저장소로 관리 | 다른 저장소 내용을 프로젝트로 완전 통합 |
관리 복잡성 | 다소 복잡 | 상대적으로 간단 |
적합 상황 | 독립된 라이브러리 및 모듈 관리 | 작은 규모의 외부 프로젝트 통합 |
히스토리 관리 | 별도 저장소로 히스토리 분리 | 메인 프로젝트로 히스토리 통합 |
개인의견
글쓴이는 현재 상황이 POC를 많이 하고 POC마다 발생되는 상황에 맞춰 커스텀이 들어가는 부분들이 생겨 Git Subtree를 결정하였다.
반응형
'SCM > Git & Github' 카테고리의 다른 글
[Git] Git 사용법(Git Bash) (0) | 2022.06.07 |
---|---|
[GitBash] 기본 명령어 (1) | 2022.06.07 |
[Git] git config (1) | 2022.03.21 |
댓글