Git 2026

فصل ۳۱ · مخازن بزرگ

مخازن بزرگ — partial clone، Scalar و monorepo

در مخزن خیلی بزرگ، کل تاریخچه و همهٔ فایل‌ها را یکجا clone نکن. Partial clone محتوا را تنبلانه می‌آورد؛ sparse-checkout فقط پوشه‌های لازم را روی دیسک می‌گذارد.

🎯 اهداف یادگیری

  • partial clone و sparse-checkout را ترکیب کنی
  • LFS را از partial clone جدا کنی
  • بدان کی monorepo و کی polyrepo
  • Scalar و Git protocol v2 را بشناسی

🧊 Partial clone

بدون همهٔ blobها
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 ساده
path filter در Actions
YAML
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 در ۲۰۲۶.

فصل ۳۱ از ۳۶ · مرجع جامع و حرفه‌ای Git و GitHub · ویرایش 1.0.0