오픈소스 프로젝트를 분석하거나 사내 대규모 프로젝트 코드를 내려받으려고 git clone을 쳤다가 하염없이 멈춘 터미널 화면을 보며 멍때린 경험, 다들 한 번쯤 있으시죠? 저도 처음 리눅스 커널이나 대형 프론트엔드 모노레포를 클론할 때 수 기가바이트의 커밋 히스토리를 전부 받느라 네트워크가 끊겨서 처음부터 다시 받았던 눈물겨운 기억이 있어요. 😂
솔직히 당장 필요한 건 ‘지금 당장 돌아가는 최신 코드’ 한 줄인데, 10년 전 누군가가 커밋했던 커다란 바이너리 파일이나 삭제된 브랜치 로그까지 내 노트북에 전부 다운로드할 필요는 전혀 없잖아요? 오늘은 개발 시간과 하드디스크 용량을 획기적으로 아껴주는 Git Shallow Clone 기술을 쉽고 명쾌하게 정리해 드릴게요!
1. Git Shallow Clone이란 무엇일까요? 🤔
기본적으로 일반적인 Git 복제(Full Clone)는 저장소가 처음 만들어진 첫 번째 커밋(Root Commit)부터 현재에 이르는 모든 변경 사항, 파일 히스토리, 브랜치와 태그 정보를 통째로 압축 팩파일(Packfile)로 내려받습니다. 히스토리가 길고 파일이 많은 저장소라면 이 용량이 수백 MB에서 수십 GB까지 훌쩍 불어나곤 해요.
반면에 Shallow Clone(얕은 복제)은 히스토리 깊이(Depth)를 지정하여 지정한 개수만큼의 최신 커밋 스냅샷만 잘라서 가져오는 마법 같은 기능이에요. 과거의 방대한 데이터 조각들을 네트워크로 받아오지 않기 때문에 네트워크 대역폭과 디스크 용량을 어마어마하게 절약할 수 있답니다.
Shallow Clone으로 생성된 저장소는 겉보기엔 일반 저장소와 완전히 똑같이 빌드되고 실행돼요. 소스 코드를 읽고, 테스트를 돌리고, 새로운 커밋을 생성하는 데 전혀 지장이 없습니다!
2. 일반 Clone vs Shallow Clone 상세 비교 📊
두 방식이 내부적으로 어떻게 다른지 한눈에 파악할 수 있도록 비교 테이블을 준비했어요. 특히 단일 브랜치 옵션이나 최신 Git 부분 복제(Partial Clone)와의 차이점도 함께 살펴보시면 좋아요.
| 방식 구분 | 가져오는 데이터 범위 | 네트워크 & 디스크 소모 | 추천 활용처 |
|---|---|---|---|
| Full Clone | 모든 브랜치 + 전체 히스토리 | 매우 큼 (100% 기준) | 장기 프로젝트 메인 개발, 오프라인 히스토리 분석 |
| Shallow Clone | 지정한 최근 N개 커밋만 포함 | 매우 작음 (약 5~15% 수준) | CI/CD 배포 파이프라인, 단순 코드 열람, 도커 빌드 |
| Single Branch | 특정 1개 브랜치의 전체 히스토리 | 보통 (다른 브랜치 제외) | 특정 기능 브랜치 작업, 릴리즈 브랜치 분석 |
| Blobless Clone | 모든 커밋 그래프 + 파일 내용은 필요시 호출 | 작음 (히스토리 그래프 유지) | 히스토리 로그는 다 보되 다운로드 속도를 높일 때 |
Shallow Clone 저장소는 과거 커밋이 잘려 있기 때문에
git log로 아주 오래전 커밋을 검색하거나, 오래된 커밋을 기준으로 하는 복잡한 리베이스(Rebase)를 수행할 때 기준점을 찾지 못해 오류가 발생할 수 있습니다.
3. 핵심 명령어와 실전 사용법 🧮
가장 기본이 되는 핵심 옵션은 바로 --depth <숫자>입니다. 보통 최신 상태만 빠르게 얻고 싶다면 숫자를 1로 주는 것이 일반적이에요.
📝 가장 널리 쓰이는 표준 명령어
git clone –depth 1 <저장소_URL>
이 명령어를 사용하면 원격 저장소의 기본 브랜치(보통 main 또는 master)에서 가장 최신 커밋 딱 1개만 받아옵니다. 여기에 다른 쓸모없는 브랜치들까지 전부 차단하고 싶다면 --single-branch를 곁들여주는 것이 정석적인 조합이에요.
1) 특정 브랜치 최신본만 단일 복제: git clone --depth 1 -b develop --single-branch <URL>
2) 특정 날짜 이후의 커밋만 복제: git clone --shallow-since="2026-01-01" <URL>
3) 특정 태그나 커밋 제외 후 복제: git clone --shallow-exclude=<태그명> <URL>
4. Shallow Clone 명령어 생성기 🔢
복제하고 싶은 저장소 주소와 옵션을 넣으면 딱 맞는 최적화 명령어를 바로 만들어주는 인터랙티브 도구입니다. 한 번 클릭해서 생성해보세요!
🔢 맞춤형 Git Clone 명령어 생성기
5. 실전 예시: CI/CD 속도 혁신과 히스토리 복원 👩💻👨💻
실제 현업 프로젝트에서 Shallow Clone을 도입했을 때 얻을 수 있는 대표적인 성공 시나리오는 바로 CI/CD 자동화 파이프라인의 빌드 시간 단축이에요.
대규모 서비스 모노레포 구축 사례
- 기존 환경: 전체 커밋 수 15만 개, 저장소 팩파일 크기 4.2GB, 클론 소요 시간 평균 3분 40초
- 개선 조치: GitHub Actions 빌드 스텝에
fetch-depth: 1적용
개선 전후 결과 비교
1) 다운로드 데이터 용량: 4.2GB → 180MB (약 95.7% 감축)
2) 러너 초기화 및 클론 시간: 220초 → 8초 (약 96% 속도 단축)
→ 개발팀의 일일 PR 머지 및 배포 대기 시간이 하루 총 40분 이상 절약되었습니다!
Shallow Clone으로 가볍게 작업하다가, 과거 히스토리가 전부 필요해졌다면 폴더를 지우고 다시 클론할 필요가 없어요! 아래 명령어를 실행하면 기존 얕은 저장소가 즉시 온전한 풀 저장소로 복원됩니다:
git fetch --unshallow
핵심 요약: 바쁜 개발자를 위한 체크리스트 📝
오늘 배운 Git Shallow Clone의 핵심 규칙을 4가지로 깔끔하게 정리해 드릴게요:
- 초고속 복제:
git clone --depth 1 <URL>을 통해 네트워크 지연 없이 최신 코드만 순식간에 받습니다. - 불필요 브랜치 차단:
--single-branch를 함께 명시해 현재 필요한 브랜치만 타겟팅합니다. - CI/CD 적극 활용: GitHub Actions 등에서는 기본값으로 얕은 복제를 사용하여 빌드 러너 비용과 시간을 아낍니다.
- 언제든 복구 가능: 나중에 전체 로그가 필요해지면
git fetch --unshallow한 줄로 전체 히스토리를 채워 넣을 수 있습니다.
Git Shallow Clone 핵심 카드
자주 묻는 질문 ❓
git push를 수행하는 데 아무런 지장이 없습니다.git fetch --unshallow 명령어 하나만 실행하면 기존 얕은 저장소가 자동으로 풀 히스토리 저장소로 전환됩니다.actions/checkout에서 기본 depth를 1로 설정합니다.git fetch --deepen=20 명령어를 사용하면 현재 잘려 있는 히스토리 기준선에서 과거 방향으로 원하는 개수만큼 히스토리만 쏙 추가로 늘릴 수 있습니다.
지금까지 용량 큰 깃 저장소를 빛의 속도로 내려받는 Git Shallow Clone 기술의 원리와 실전 팁들을 꼼꼼하게 살펴보았습니다. 평소 대형 프로젝트나 모노레포를 다루며 느린 클론 속도 때문에 답답하셨다면 오늘부터 꼭 --depth 1 옵션을 활용해 쾌적한 개발 환경을 만들어보세요!
혹시 명령어를 적용하면서 궁금한 점이나 의외의 오류를 만나셨다면 편하게 댓글로 남겨주세요~ 친절히 답변해 드릴게요! 😊