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