Git Subtree#
Git Subtree 는 Git 에서 제공하는 저장소 관리 도구로, 하나의 저장소 안에 다른 저장소를 포함시켜 관리할 수 있게 해주는 기능이다. 서브모듈 (Submodule) 의 대안으로 개발되었으며, 주요 저장소 (상위 저장소) 에 하위 저장소의 파일들을 직접 포함시키는 방식으로 작동한다. Git Subtree 는 복잡한 프로젝트 구조에서 코드 재사용, 공유 라이브러리 관리, 여러 저장소의 통합 관리에 유용하며, 특히 상위 저장소에서 하위 저장소의 코드를 직접 수정하고 원래 하위 저장소에 변경사항을 반영할 수 있다는 점이 큰 특징이다. 이러한 기능은 팀 협업, 라이브러리 관리, 마이크로서비스 구조의 개발 등에서 활용된다.
핵심 개념#
- Git Subtree는 외부 저장소를 하나의 디렉토리처럼 포함하되, 그 내용을 상위 저장소로 직접 병합하는 방식.
- 하위 저장소는 더 이상 참조만 되는 것이 아니라 실제 코드와 히스토리가 포함됨.
개념 | 설명 |
---|
서브트리 | 외부 저장소 코드를 메인 프로젝트에 복제·통합 |
단일 히스토리 | 모든 변경 이력을 메인 저장소에서 관리 |
양방향 동기화 | 메인 ↔ 서브트리 저장소 간 변경사항 상호 반영 |
목적 & 필요성#
Git Subtree 의 주요 목적은 다음과 같다:
- 여러 프로젝트에서 공통 코드 또는 라이브러리를 공유하고 재사용하기 위함
- 하나의 저장소에서 여러 저장소를 통합 관리가 가능하게 하기 위함
- 저장소가 분리된 파일들을 하나의 저장소에 포함시켜 개발을 진행하기 위함
- 코드 공유와 동기화를 단순화하기 위함
- 여러 개의 프로젝트를 하나로 합치기 위함
필요성#
Git Subtree 는 다음과 같은 상황에서 필요성이 대두된다:
- 여러 프로젝트에 걸쳐 공통 코드나 라이브러리를 유지보수해야 할 때
- 백엔드를 마이크로서비스 구조로 개발하면서 API 응답, 데이터 모델에 같은 타입을 사용해 일관성을 유지해야 할 때
- 여러 프로젝트를 통합 관리하고자 할 때
- 핵심 디자인 파일을 여러 저장소에 포함시키고 싶을 때
- 프로젝트 히스토리를 관리하며 통합할 필요가 있을 때
주요 기능#
Git Subtree 의 주요 기능은 다음과 같다:
- 하위 저장소 추가:
git subtree add
명령을 통해 외부 저장소를 현재 저장소에 추가 - 하위 저장소 업데이트:
git subtree pull
명령으로 외부 저장소의 변경사항을 가져옴 - 변경사항 푸시:
git subtree push
명령으로 로컬에서 수정한 하위 저장소 내용을 원격 저장소에 반영 - 병합 전략: 서브트리 병합 (subtree merge) 기능을 통해 양쪽 저장소의 변경사항을 모두 반영
Git Subtree 는 다음과 같은 역할을 수행한다:
- 상위 저장소에 파일을 직접 추가하고 트래킹함
- 서브트리의 원격에 있는 소스와 서브트리를 추가한 저장소의 소스가 서로 달라도 subtree merge 기능을 사용해 양쪽의 변경사항을 모두 반영할 수 있도록 함
- 상위 저장소에서 서브트리를 직접 수정하고 원격에 푸시할 수 있게 함
- 여러 저장소의 히스토리를 관리하며 재사용할 수 있도록 함
Git Subtree 의 주요 특징은 다음과 같다:
- 상위 저장소에 파일을 직접 추가하고 트래킹하기 때문에 서브트리의 변경사항도 상위 저장소에 기록됨
- 서브모듈과 달리 메타데이터 파일 (예:.gitmodule) 을 생성하지 않음
- 하위 저장소 (Child) 의 내용을 상위 저장소 (Parent) 에서 일반적인 git 명령어로 관리할 수 있음
- 하위 저장소의 내용을 수정하기 위해 별도의 저장소 복사본을 유지할 필요가 없음
- 사용자가 새로운 것을 배울 필요 없이 저장소를 사용할 수 있게 함
핵심 원칙#
Git Subtree 는 다음과 같은 핵심 원칙에 기반한다:
- 통합성: 여러 저장소를 하나의 저장소로 통합하여 관리
- 투명성: 사용자에게 서브트리의 존재를 숨기고 일반적인 Git 워크플로우 유지
- 양방향 동기화: 상위 저장소와 하위 저장소 간의 변경사항을 양방향으로 전파
- 히스토리 보존: 하위 저장소의 커밋 히스토리를 유지하면서 통합
- 유연성: 다양한 상황과 워크플로우에 적응할 수 있는 유연한 구조 제공
주요 원리 & 작동 원리#
다이어그램#
1
2
3
| MainRepo/
├── project/
│ └── external-lib/ (실제 코드 포함됨)
|
주요 원리#
Git Subtree 의 주요 원리는 다음과 같다:
- 복사 원리: Subtree 는 복사 개념으로, 하위 저장소의 코드를 상위 저장소에 복사하여 포함시킴
- 병합 원리: 서브트리 Merge 전략을 사용하여 Git 이 서브트리를 찾아 메인 프로젝트로 서브프로젝트의 내용을 병합함
- 트래킹 원리: 상위 저장소가 하위 저장소의 파일을 직접 추적하며 변경사항을 기록
- 분할 원리:
git subtree split
명령으로 서브트리의 변경사항만 추출하여 별도의 커밋으로 분리 가능 - 동기화 원리: 상위 저장소와 하위 저장소 간에 push 와 pull 을 통한 양방향 동기화 가능
작동 원리#
Git Subtree 는 다음과 같은 방식으로 작동한다:
- 추가 (Add):
- 먼저 원격 저장소를 추가한 후, subtree add 명령으로 하위 저장소를 특정 폴더에 추가함
- 하위 저장소의 전체 커밋 히스토리가 상위 저장소로 병합됨
- 가져오기 (Pull):
- 원격의 하위 저장소에 변경사항이 있을 경우, subtree pull 명령으로 상위 저장소에 반영함
- 상위 저장소에 하위 저장소의 최신 변경사항을 병합함
- 내보내기 (Push):
- 상위 저장소에서 하위 저장소의 내용을 수정한 후, subtree push 명령으로 원격 하위 저장소에 반영함
- 원래 별개의 프로젝트였던 원격 저장소에 변경사항을 동기화할 수 있음
- 분할 (Split):
- subtree split 명령을 통해 마지막 분할 이후 변경된 내용만 찾아 별도의 커밋으로 분리함
- 이렇게 분리된 커밋들은 하위 저장소의 원격 저장소로 푸시할 수 있음
명령어 흐름#
1
2
3
4
5
6
7
8
| # 1. 서브트리 추가
git subtree add --prefix=external-lib https://github.com/example/lib.git main --squash
# 2. 외부 변경 사항 병합
git subtree pull --prefix=external-lib https://github.com/example/lib.git main --squash
# 3. 외부에 변경사항 push (있을 경우)
git subtree push --prefix=external-lib https://github.com/example/lib.git main
|
구성 요소 및 아키텍처#
Git Subtree 는 다음과 같은 구성 요소로 이루어져 있다:
- 상위 저장소 (Parent Repository):
- 하위 저장소를 포함하는 주 저장소
- 모든 서브트리 조작의 기준점이 됨
- 일반적인 git add, commit, push, pull 로 관리함
- 하위 저장소 (Child Repository):
- 상위 저장소에 포함될 외부 저장소
- 원격에 독립적으로 존재하는 별도의 프로젝트
- 상위 저장소에서는 하나의 디렉토리로 취급됨
- 서브트리 참조 (Subtree Reference):
- git log 에 기록되는 서브트리 관련 정보 (git-subtree-dir, git-subtree-mainline, git-subtree-split 등)
- 서브트리의 위치와 마지막 동기화 상태를 추적하는 데 사용됨
- 원격 참조 (Remote Reference):
- 원격 저장소를 가리키는 참조 (remote add 로 추가됨)
- 서브트리 명령어에서 원격 저장소 이름으로 사용됨
- 서브트리 명령 (Subtree Commands):
- add, pull, push, split 등의 서브트리 전용 명령어
- 상위 저장소와 하위 저장소 간의 동기화를 관리함
Git Subtree 명령어#
서브트리 추가 (add)#
외부 저장소의 특정 브랜치를 현재 저장소의 하위 디렉토리로 가져온다.
1
| git subtree add --prefix= [--squash]
|
예시
1
| git subtree add --prefix=lib https://github.com/user/library.git main --squash
|
lib
폴더에 library.git
의 main
브랜치 코드를 추가하고, 커밋 내역을 하나로 합친다 (--squash
옵션).
서브트리 업데이트 (pull)#
외부 저장소의 변경사항을 메인 저장소의 하위 디렉토리에 병합한다.
1
| git subtree pull --prefix= [--squash]
|
예시
1
| git subtree pull --prefix=lib https://github.com/user/library.git main --squash
|
lib
폴더의 서브트리를 최신 상태로 업데이트하며, 변경 내역을 하나의 커밋으로 합친다.
서브트리 변경사항 푸시 (push)#
메인 저장소에서 하위 디렉토리 (서브트리) 에서 작업한 변경 사항을 외부 저장소로 푸시한다.
1
| git subtree push --prefix=
|
예시
1
| git subtree push --prefix=lib https://github.com/user/library.git main
|
lib
디렉토리의 변경사항을 외부 저장소의 main
브랜치에 반영한다.
서브트리 분리 (split)#
하위 디렉토리의 변경 내역만 별도의 브랜치로 분리한다.
1
| git subtree split --prefix= -b
|
예시
1
| git subtree split --prefix=lib -b lib-branch
|
lib
폴더의 변경 이력만을 담은 lib-branch
브랜치를 생성한다.
원격 저장소 추가 (remote add)#
외부 저장소를 원격 저장소로 등록해두면 명령어가 더 간결해진다.
예시
1
| git remote add library https://github.com/user/library.git
|
실무에서 자주 쓰는 옵션#
--squash
: 여러 커밋을 하나로 합쳐 메인 저장소의 커밋 히스토리를 깔끔하게 유지합니다.--prefix
: 외부 저장소가 병합될 하위 디렉토리 경로를 지정합니다.
요약표#
명령어 유형 | 명령어 예시 | 설명 |
---|
추가 (add) | git subtree add --prefix=lib https://github.com/user/library.git main --squash | 외부 저장소를 하위 폴더로 추가 |
업데이트 (pull) | git subtree pull --prefix=lib https://github.com/user/library.git main --squash | 외부 저장소의 변경분 반영 |
푸시 (push) | git subtree push --prefix=lib https://github.com/user/library.git main | 하위 폴더 변경분 외부 저장소로 푸시 |
분리 (split) | git subtree split --prefix=lib -b lib-branch | 하위 폴더만 분리해 새 브랜치 생성 |
장점과 단점#
구분 | 항목 | 설명 |
---|
✅ 장점 | 단일 저장소 관리 | 여러 개의 프로젝트를 하나의 저장소로 관리할 수 있음 |
| 간편한 사용성 | 사용자들이 서브트리로 의존성을 관리한다는 사실을 잊어도 될 정도로 투명하게 작동함 |
| 메타데이터 파일 없음 | Git 서브모듈과 달리 새로운 메타데이터 파일 (예:.gitmodule) 을 생성하지 않음 |
| 직접 수정 가능 | 상위 저장소에서 서브트리를 직접 수정하고 원격에 푸시할 수 있음 |
| 일관된 워크플로 | 저장소 사용자들이 새로운 것을 배울 필요가 없음 |
| 자동 클론 | 상위 프로젝트 클론 시 서브트리의 코드도 자동으로 사용 가능함 |
| 병합 용이성 | 서브트리 merge 기능을 통해 양쪽 저장소의 변경사항을 모두 반영할 수 있음 |
| 오래된 Git 버전 지원 | Git 1.5.2 보다 오래된 버전에서도 지원됨 |
⚠ 단점 | 명령어 복잡성 | 새로운 병합 전략 (git subtree) 에 대해 학습해야 함 |
| 서브트리 위치 기억 | 어느 디렉토리를 –prefix 로 지정해야 하는지 기억해야 함 |
| 상위 저장소 크기 증가 | 하위 저장소를 복사하므로 상위 저장소의 크기가 커짐 |
| 제한된 접근 제어 | 모든 사용자가 서브트리의 내용을 자유롭게 변경해 원격에 푸시할 수 있음 |
| 업스트림 기여 복잡성 | 서브프로젝트에 코드를 기여하는 과정이 더 복잡함 |
| 책임의 분산 | 슈퍼 프로젝트와 서브 프로젝트 코드를 커밋에서 혼합하지 않을 책임이 개발자에게 있음 |
분류에 따른 종류 및 유형#
종류 | 설명 | 사용 시나리오 |
---|
기본 서브트리 | –prefix 옵션으로 서브트리를 클론할 폴더 지정하고 원격 저장소와 브랜치를 지정하여 추가 | 간단한 외부 저장소 통합 시 |
원격 별칭 서브트리 | 서브트리를 원격으로 추가하여 더 짧은 형태로 참조하는 방식 | 반복적인 서브트리 작업 시 |
스쿼시 서브트리 | –squash 옵션을 사용하여 외부 저장소의 커밋 기록을 하나의 커밋으로 압축 | 외부 저장소의 히스토리가 필요 없을 때 |
분할 서브트리 | git subtree split 명령을 사용하여 서브디렉토리를 변경 이력과 함께 분리 | 하위 프로젝트를 독립 저장소로 분리할 때 |
병합 서브트리 | -s recursive -Xsubtree=경로 옵션을 사용한 병합 전략 | 다른 브랜치의 서브디렉토리를 병합할 때 |
실무 적용 예시#
적용 분야 | 예시 | 이점 |
---|
코드 공유 | 백엔드 마이크로서비스 구조에서 API 응답, 데이터 모델의 타입을 일관되게 유지 | 여러 서비스 간 타입 일관성 보장 |
테마 관리 | 블로그 플랫폼의 테마를 별도 저장소로 관리하면서 메인 블로그 저장소에 통합 | 테마 수정과 업스트림 반영 용이 |
디자인 시스템 | 핵심 디자인 엘리먼트와 제품 개발 파일을 분리하여 핵심 디자인 파일을 여러 저장소에 포함 | 디자인 시스템의 일관성 유지 |
라이브러리 관리 | 무거운 의존성 (외부 도구나 라이브러리) 을 관리할 때 의존성의 전체 히스토리를 상위 저장소에 통합 | 라이브러리 사용 및 수정 용이 |
모노레포 | 여러 SPM(Swift Package Manager) 패키지를 개발 저장소에서 쉽게 작업하며 개별 저장소로 배포 | 단일 저장소 개발과 분리 배포 장점 결합 |
플러그인 관리 | Vim 플러그인을 트래킹하여 통합하고 업데이트 | 플러그인 관리 및 업데이트 용이 |
오픈소스 통합 | 외부 저장소 코드를 한 번만 또는 가끔 가져와서 사용할 때 | 외부 코드 통합과 관리 단순화 |
실무에서 효과적으로 적용하기 위한 고려사항 및 주의할 점#
고려사항 | 설명 | 주의할 점 |
---|
저장소 구조 설계 | 밀접하게 연관된 프로젝트의 경우 모노레포 방식을 고려해야 함 | 관계가 느슨한 프로젝트에는 부적합할 수 있음 |
작업 디렉토리 관리 | git subtree 관련 조작은 저장소 최상위 폴더에서 이루어져야 함 | 하위 디렉토리에서 명령 실행 시 오류 발생 |
변경사항 동기화 전략 | 원래 저장소에서 수정된 코드를 반영하려면 subtree pull 명령어 사용 | fetch/merge 로는 동기화되지 않음 |
충돌 관리 | 변경 내역을 push 하기 전에 pull 해야 충돌 방지 | 양방향 동기화 시 충돌 발생 가능성 높음 |
자동화 고려 | 많은 서브트리를 관리할 경우 스크립트와 자동화를 통해 관리해야 함 | 수동 관리는 오류 가능성 증가 |
팀 교육 | 어느 디렉토리가 subtree 인지 별도로 기록하고 팀원들과 공유해야 함 | 문서화 없이는 팀원들이 혼란 겪을 수 있음 |
명령어 단순화 | 원격 별칭을 사용하여 명령어를 짧게 만드는 것이 좋음 | 긴 명령어는 기억하기 어렵고 오류 가능성 높음 |
스쿼시 옵션 사용 | –squash 옵션으로 히스토리를 압축하여 관리 가능 | 모든 커밋 히스토리가 필요한 경우에는 부적합 |
최적화하기 위한 고려사항 및 주의할 점#
고려사항 | 설명 | 주의할 점 |
---|
저장소 크기 관리 | 서브트리는 상위 저장소에 파일을 직접 추가하므로 저장소 크기가 커짐 | 대형 저장소에서는 성능 저하 가능성 |
히스토리 압축 | 스쿼시 옵션을 사용하여 모든 커밋을 하나로 압축하면 저장소 크기와 성능 개선 | 상세 히스토리가 손실될 수 있음 |
분할 성능 | 리조인 옵션을 사용하여 전체 히스토리를 매번 검색하는 대신 체크포인트 활용 | 리조인 없이는 대형 저장소에서 속도 저하 |
저장소 규모 | 100 개 이상의 서브모듈/서브트리를 관리하는 경우 어떤 방식을 사용하든 관리가 어려움 | 과도한 서브트리 사용 지양 |
캐싱 최적화 | 모노레포 대비 서브트리는 더 작은 단위로 캐싱 최적화 가능 | 통합 빌드/CI 설정 필요 |
업데이트 빈도 | 자주 업데이트가 필요 없는 외부 코드에 적합 | 빈번한 업데이트가 필요한 경우 오버헤드 발생 |
병합 복잡성 | 외부 저장소의 변경사항을 메인 저장소에 병합하는 과정에서 복잡성 증가 가능 | 복잡한 병합 상황에 대비 필요 |
최신 동향#
주제 | 항목 | 설명 |
---|
모노레포 통합 | Git Subtree 와 모노레포 | Apollo 는 Git Subtree 를 사용하여 모노레포에서 Swift 패키지를 관리하는 방식을 도입함. 여러 개별 패키지를 하나의 개발 저장소에서 작업하고 자동화된 GitHub Actions 워크플로우를 통해 변경사항을 자동으로 분리하여 각 패키지 저장소로 푸시하는 방식이 인기를 얻고 있음 |
자동화 | CI/CD 파이프라인 통합 | 2025 년에는 Git subtree 작업이 CI/CD 파이프라인에 통합되어 자동화된 워크플로우가 증가함. 코드 변경 시 자동으로 의존성을 관리하고 업데이트하는 방식이 표준화되고 있음 |
대안 솔루션 | 새로운 대안들 | git-subrepo 와 같은 새로운 대안들이 등장하여 Git Subtree 와 Git Submodule 의 제한사항을 해결하려는 시도가 증가함. 이러한 도구들은 더 간단한 워크플로우와 향상된 협업 기능을 제공함 |
패키지 관리 통합 | 언어별 패키지 관리자와 통합 | Rust 의 Cargo.toml 과 같은 텍스트 파일에 의존성 해시를 커밋하는 방식이 인기를 얻으면서, Git Subtree 는 패키지 관리자가 지원하지 않는 상황에서 주로 사용됨 |
하이브리드 접근법 | 모노레포와 멀티레포 혼합 | 액세스 권한에 따라 코드를 별도의 모노레포로 분할하고, git-subrepo 를 사용하여 모든 모노레포를 단일 모노레포에서 관리하는 하이브리드 접근법이 증가함 |
클라우드 개발 환경 | 원격 개발 환경에서의 최적화 | 클라우드 기반 개발 환경에서 Git Subtree 를 사용할 때 네트워크 지연과 저장소 크기 관리를 최적화하는 방법에 대한 관심이 증가함 |
주목해야 할 기술들#
주제 | 항목 | 설명 |
---|
자동화 도구 | Git Subtree 자동화 | GitHub Actions 와 같은 CI/CD 도구를 활용하여 Git Subtree 의 분할 및 병합 작업을 자동화하는 워크플로우. 이를 통해 개발자는 복잡한 Git Subtree 명령어를 직접 사용하지 않아도 됨 |
Git Subrepo | Git Subtree 대안 | https://github.com/ingydotnet/git-subrepo는 Git Subtree 와 Git Submodule 의 장점을 결합한 대안으로 주목받고 있음. 더 간단한 명령어와 향상된 기능을 제공함 |
모노레포 도구 | 기업용 모노레포 솔루션 | nx 모노레포와 같은 도구들이 Angular 와 NestJS 를 함께 사용하는 프로젝트에서 활용되고 있음. 이러한 도구들은 캐싱 및 영향받는 패키지만 빌드하는 기능을 제공함 |
MDLR | 선언적 Git 의존성 도구 | MDLR(“Modular”) 은 Git Submodule 과 유사한 기능을 제공하면서도 복잡한 워크플로우를 개선한 선언적 버전 관리 Git 의존성 도구 |
하드 링크 활용 | 파일 시스템 최적화 | “.boiler” 폴더에 서브모듈을 두고 하드 링크를 사용하여 애플리케이션의 “src” 디렉토리와 연결하는 방식. 이를 통해 링크된 파일 편집 시 원본 파일도 업데이트됨 |
의존성 관리 자동화 | 스마트 의존성 업데이트 | 서드파티 의존성을 자동으로 추적하고 관리하는 도구들이 Git Subtree 와 통합되고 있음. 이를 통해 보안 취약점이 있는 의존성을 자동으로 업데이트할 수 있음 |
앞으로의 전망#
주제 | 항목 | 설명 |
---|
단순화된 인터페이스 | 사용 편의성 향상 | Git Subtree 의 복잡한 명령어를 단순화하고 직관적인 인터페이스를 제공하는 도구들이 더욱 발전할 것으로 예상됨. 이를 통해 더 많은 개발자가 Git Subtree 를 채택할 것으로 전망됨 |
AI 통합 | 지능형 병합 충돌 해결 | AI 를 활용하여 Git Subtree 병합 충돌을 지능적으로 해결하는 도구들이 등장할 것으로 예상됨. 이는 복잡한 멀티레포 환경에서의 작업을 크게 단순화할 수 있음 |
하이브리드 접근법 | 모노레포와 멀티레포 결합 | Apollo 의 Swift 패키지 관리 사례처럼 개발은 모노레포에서, 배포는 개별 저장소로 하는 하이브리드 접근법이 더욱 인기를 얻을 것으로 전망됨 |
Git 네이티브 기능 확장 | 내장 기능 확대 | Git 의 기본 기능으로 현재 Git Subtree 가 제공하는 기능을 더 직관적이고 사용하기 쉽게 통합하는 방향으로 발전할 것으로 예상됨 |
패키지 매니저 통합 | 의존성 관리 통합 | 언어별 패키지 매니저와 Git Subtree 의 기능을 통합하여 코드와 의존성을 함께 관리하는 통합 솔루션이 발전할 것으로 전망됨 |
분산 개발 최적화 | 원격 작업 환경 지원 | 전 세계적으로 분산된 개발 팀을 위해 네트워크 지연과 저장소 크기 문제를 해결하는 최적화된 Git Subtree 솔루션이 발전할 것으로 예상됨 |
추가 학습 주제#
카테고리 | 주제 | 설명 |
---|
Git 워크플로우 | Git Subtree 명령어 심화 | Git Subtree 의 고급 옵션과 명령어들 (split, merge 등) 에 대한 심층적인 이해 |
Git 워크플로우 | Git Subtree vs Git Submodule | 두 기능의 상세한 비교 분석과 각각 적합한 사용 사례 |
Git 워크플로우 | Subtree 병합 전략 | 서브트리 병합 전략의 내부 작동 방식과 최적화 방법 |
시스템 설계 | 모노레포 아키텍처 | 대규모 프로젝트에서 모노레포와 Git Subtree 를 활용한 최적의 저장소 구조 설계 |
시스템 설계 | 마이크로서비스와 Git Subtree | 마이크로서비스 아키텍처에서 공통 코드를 관리하기 위한 Git Subtree 활용법 |
자동화 | Git Subtree CI/CD 통합 | GitHub Actions 등을 활용한 Git Subtree 작업 자동화 방법 |
성능 최적화 | 대규모 저장소 최적화 | 100 개 이상의 하위 저장소를 관리할 때의 성능 최적화 방법 |
대안 기술 | Git Subrepo | Git Subtree 와 Submodule 의 대안으로서 Git Subrepo 의 활용법 |
대안 기술 | MDLR | 선언적 버전 관리 Git 의존성 도구인 MDLR 의 특징과 활용법 |
관련 분야 추가 학습 주제#
카테고리 | 주제 | 설명 |
---|
버전 관리 | Git 내부 구조 | Git 의 내부 구조와 저수준 명령어에 대한 이해 |
버전 관리 | Git 병합 전략 | 다양한 Git 병합 전략의 비교와 각 상황에 적합한 전략 선택 방법 |
소프트웨어 아키텍처 | 모노레포 vs 멀티레포 | 프로젝트 규모와 성격에 따른 모노레포와 멀티레포 선택 기준 |
소프트웨어 아키텍처 | 마이크로서비스 설계 | 코드 공유가 필요한 마이크로서비스 아키텍처 설계 방법 |
의존성 관리 | 패키지 관리자 통합 | 언어별 패키지 관리자와 Git 워크플로우의 통합 방법 |
DevOps | CI/CD 파이프라인 설계 | Git Subtree 를 활용한 효율적인 CI/CD 파이프라인 구축 방법 |
CI/CD | Subtree 빌드 자동화 | .gitlab-ci.yml 또는 GitHub Actions 스크립트 구성 |
코드 품질 | 코드 공유 전략 | 여러 프로젝트 간 코드 공유를 위한 효과적인 전략 |
팀 협업 | 효율적인 개발 워크플로우 | Git Subtree 를 활용한 분산 팀의 효율적인 협업 방법 |
보안 | 의존성 취약점 관리 | Git Subtree 로 통합된 외부 코드의 보안 취약점 관리 방법 |
용어 정리#
용어 | 설명 |
---|
상위 저장소 (Parent Repository) | Git Subtree 에서 하위 저장소를 포함하는 주 저장소 |
하위 저장소 (Child Repository) | 상위 저장소에 포함되는 외부 저장소 |
서브트리 병합 (Subtree Merge) | 한 프로젝트를 다른 프로젝트의 하위 디렉토리로 매핑하여 병합하는 전략 |
Squash Merge | 여러 커밋을 단일 이력으로 병합 |
Detached HEAD | 특정 커밋에 고정된 작업 상태 |
–prefix 옵션 | 서브트리를 클론할 폴더를 지정하는 Git Subtree 명령어 옵션 |
–squash 옵션 | 외부 저장소의 커밋 기록을 하나의 커밋으로 압축하는 옵션 |
subtree split | 디렉토리만 분리해 독립 저장소처럼 추출하는 명령어 |
모노레포 (Monorepo) | 여러 프로젝트를 하나의 저장소에서 관리하는 방식 |
멀티레포 (Multi-repo) | 여러 프로젝트를 각각 별도의 저장소로 관리하는 방식 |
git-subrepo | Git Subtree 와 Submodule 의 장점을 결합한 대안 도구 |
참고 자료#