در مخزن خیلی بزرگ، کل تاریخچه و همهٔ فایلها را یکجا clone نکن. Partial clone محتوا را تنبلانه میآورد؛ sparse-checkout فقط پوشههای لازم را روی دیسک میگذارد.
🎯 اهداف یادگیری
- partial clone و sparse-checkout را ترکیب کنی
- LFS را از partial clone جدا کنی
- بدان کی monorepo و کی polyrepo
- Scalar و Git protocol v2 را بشناسی
🧊 Partial clone
git clone --filter=blob:none git@github.com:org/mono.git git clone --filter=tree:0 <url> # حتی تنبلتر؛ treeها هم بعداً
وقتی فایل را checkout میکنی Git blob را میگیرد. نیاز به پروتکل v2 و سرور پشتیبان (GitHub دارد).
📂 Sparse checkout cone
git sparse-checkout init --cone git sparse-checkout set apps/web packages/ui
--cone الگوهای پوشهای سریعتر از globهای پراکنده است.
🧰 Scalar
ابزار مایکروسافت (همراه Git for Windows / قابل نصب جدا): git maintenance، fsmonitor، partial clone را یکجا برای ریپوهای عظیم ویندوز تنظیم میکند. اگر checkout ۳۰ ثانیه طول میکشد، Scalar را امتحان کن نه «لپتاپ نو».
🏢 Monorepo در برابر Polyrepo
| Monorepo | Polyrepo | |
|---|---|---|
| تغییر چندپروژه | یک PR | چند PR هماهنگ |
| CI | باید path filter شود وگرنه میسوزد | |
| دسترسی | همه همهچیز را میبینند مگر sparse/server | راحتتر per-team |
| ابزار | Nx, Bazel, Turborepo | Actions ساده |
on: pull_request: paths: ["apps/web/**", "packages/ui/**"]
بدون این، هر تغییر README کل مزرعهٔ runner را آتش میزند.
VS Code multi-root برای polyrepo؛ برای monorepo همان sparse + workspace file که فقط پوشههای لازم را نشان میدهد.
Senior — blob:none در برابر LFS؟ LFS باینریهای مشخص را خارج میکند. Partial clone همهٔ blobهای Git را تنبل میکند. اغلب با هم استفاده میشوند.
✅ چکلیست فهم
- clone فیلترشده را تجربه کردهای
- CI را path-aware کردهای
- میدانی monorepo بدون ابزار ساخت جهنم است
فصل بعد: Copilot، Coding Agent و AGENTS.md در ۲۰۲۶.