Quick Flow
sparse checkout은 이 worktree에 materialize할 경로를 줄이는 기능이고, partial clone은 필요한 blob을 나중에 받는 전송 filter입니다. 둘은 독립 기능이며, partial clone은 remote server가 filter를 지원해야 합니다.
git clone --filter=blob:none --no-checkout <url> monorepo
cd monorepo
git sparse-checkout init --cone
git sparse-checkout set apps/web packages/ui
git switch main
# 현재 선택 경로 확인 또는 전체 worktree 복원
git sparse-checkout list
git sparse-checkout disable| 필요한 것 | 선택 | 확인할 조건 |
|---|---|---|
| 일부 directory만 worktree에 표시 | sparse checkout cone mode | directory 중심 input·top-level/ancestor 포함 |
| 파일 pattern까지 세밀하게 선택 | non-cone mode | pattern 비용·도구 호환성 |
| 처음 blob 전송을 지연 | clone --filter=blob:none | server filter 지원·lazy fetch |
| merge/rebase 뒤 선택 범위 복구 | sparse-checkout reapply | skipped path materialization |
| worktree별 다른 선택 | worktree-specific config | linked worktree의 설정 범위 |
cone과 non-cone의 입력 모델
cone mode는 directory를 선택하는 일반적인 방식입니다. 선택 directory의 file과 하위 directory를 포함하고, 필요한 top-level file·ancestor directory도 worktree에 남길 수 있습니다. file 하나만 선택하거나 복잡한 exclude pattern이 필요하면 non-cone mode를 검토하지만, path pattern 처리와 외부 tool 호환성을 실제 repository에서 확인합니다.
git sparse-checkout set은 선택 경로를 새 목록으로 만들고 add는 기존 목록에 경로를 더합니다. sparse index는 index 성능을 개선할 수 있지만 모든 third-party tool이 같은 방식으로 이해한다고 가정하지 않습니다. IDE, formatter, build script가 skipped path를 요구하는지 먼저 test합니다.
partial clone과 작업 중 경계
sparse checkout만으로 object database 전송량이 자동으로 줄어들지는 않습니다. --filter=blob:none partial clone은 blob download를 실제 필요 시점으로 미루며, server가 filter를 지원하지 않으면 기대한 방식으로 동작하지 않을 수 있습니다. clone 후 git show, checkout, build가 선택 밖 object를 필요로 하면 Git이 lazy fetch하거나 command가 추가 data를 요구할 수 있습니다.
merge, rebase, git add, conflict resolution처럼 index를 갱신하는 작업은 skipped path를 worktree에 materialize할 수 있습니다. 이때 작업을 버리기 전에 git status·git diff로 변경을 확인하고, 선택 범위로 다시 맞추려면 git sparse-checkout reapply를 사용합니다. sparse checkout은 access control도 아니고 history를 숨기는 기능도 아닙니다.
도입 확인
일반 clone과 sparse/partial clone을 같은 target environment에서 비교해 clone time, disk, IDE index, build·test 성공률을 측정합니다. 먼저 하나의 worktree에서 선택 directory, merge conflict, path 밖의 generated file을 test하고 팀 setup script로 고정합니다. provider별 지원이나 절감 수치는 version·server·repository 크기에 따라 달라져 측정 없이 약속하지 않습니다.
sparse checkout은 worktree 편의 기능입니다. 선택 밖 path가 없다고 해서 Git object·history·권한이 사라진 것은 아니며, merge/rebase 중 나타난 path를 무심코 삭제하지 않도록 status와 reapply를 먼저 확인하세요.
참고 링크
2 sources