CI_CD
GitLab을 포함한 Git 환경에서 레포지토리의 일부 코드나 디렉터리만 가져오는 5가지 방법
ipxy
2025. 3. 20. 10:48
728x90
다음은 GitLab을 포함한 Git 환경에서 레포지토리의 일부 코드나 디렉터리만 가져오는 5가지 방법을 한 번에 보기 쉽게 정리한 표입니다.
Git LFS
구분 | Sparse Checkout | Submodule | Subtree | Archive | Git LFS |
개념 | 한 저장소의 특정 폴더만 체크아웃하여 사용하는 방식 | 독립된 별도의 저장소를 하위 모듈로 참조하는 방식 | 독립된 저장소의 히스토리를 병합(merge)하는 방식 | 특정 파일이나 디렉터리를 압축하여 가져오는 방식 | 큰 파일을 별도의 저장소로 관리하는 방식 |
히스토리 관리 | 전체 히스토리 존재 | 독립된 별도의 히스토리 관리 가능 | 병합 시 히스토리 통합 가능 | 히스토리 보존 불가능 (파일만 가져옴) | 메타정보는 히스토리 보존, 실제 파일은 별도 저장 |
관리 편의성 | ✅ 쉬움 (심플함) | ⚠️ 보통 (조금 복잡함) | ⚠️ 보통 | ✅ 매우 쉬움 | ⚠️ 별도 설정 및 관리 필요 |
독립성 | ❌ 낮음 (하나의 저장소) | ✅ 매우 높음 (독립적 관리) | ✅ 높음 (독립적 관리 가능) | ❌ 없음 (일회성 다운로드) | ⚠️ 일부 독립성 있음(파일 기준) |
추천 상황 | 모노레포 환경, 특정 디렉터리만 빠르게 체크아웃 시 적합 | 독립적 라이브러리나 모듈 관리 | 독립된 모듈 병합 시 용이 | 일회성 또는 임시 다운로드 시 | 대용량 바이너리 파일을 선택적 관리 |
🚩 각 방식의 주요 명령어 정리
1.Sparse Checkout
git clone --no-checkout <repo>
cd <repo>
git sparse-checkout init --cone
git sparse-checkout set <폴더명>
git checkout
2.Git Submodule
git submodule add <submodule_repo> <경로>
git submodule update --init
git submodule status
3.Git Subtree
git subtree add --prefix=<폴더명> <repo-url> <branch>
# 서브트리 변경사항 병합
git subtree pull --prefix <폴더명> <repo> <branch>
4.Git Archive (파일 다운로드 방식)
# ZIP 파일로 특정 커밋이나 브랜치의 일부 디렉터리 받기
wget https://gitlab.example.com//-/archive//-.zip
5.Git LFS (대용량 파일 관리 방식)
git lfs install
git lfs track "*.zip"
git add .gitattributes
git commit -m "track binaries"
git push
🎯 각 방식의 특징 비교표
항목 | Sparse Checkout | Submodule | Subtree | Archive | LFS |
히스토리 유지 | ✅ 전체 유지 | ✅ 독립 유지 | ✅ 가능 | ❌ 없음 | ⚠️ 부분 유지 |
독립성 | ⚠️ | ✅ | ✅ | ❌ | ⚠️ |
관리 난이도 | ✅ 쉬움 | ⚠️ 중간 | ⚠️ 중간 | ✅ 쉬움 | ⚠️ 중간 |
반복 업데이트 용이성 | ✅ 좋음 | ⚠️ 중간 | ✅ 좋음 | ❌ 나쁨 | ⚠️ 중간 |
저장소 크기 관리 효율성 | ✅ 좋음 | ✅ 좋음 | ⚠️ 중간 | ✅ 좋음 | ✅ 좋음 |
🚀 사용 상황에 따른 최적의 선택
- 모노레포에서 일부 코드만 작업 및 CI/CD를 위한 빌드 환경
→ ✅ Sparse Checkout - 독립된 라이브러리나 공통 모듈을 여러 프로젝트에서 재사용
→ ✅ Git Submodule - 외부 저장소의 특정 폴더를 히스토리 포함하여 내 레포에 완전히 가져오기
→ ✅ Git Subtree - 단순히 일회성으로 특정 파일이나 폴더를 가져오기
→ ✅ Git Archive - 대용량 바이너리 파일을 효율적으로 관리
→ ✅ Git LFS
728x90