GIT-BACKFILL(1) دستورات عمومی کاربر GIT-BACKFILL(1)

git-backfill - دانلود اشیای گمشده در کلون‌های کم‌عمق یا جزیی

git backfill [--min-batch-size=<n>] [--[no-]sparse] [--[no-]include-edges] [<revision-range>]

کلون‌های جزئی بدون بلاب (Blobless partial clones) با استفاده از git clone --filter=blob:none ایجاد می‌شوند و سپس مخزن محلی را به گونه‌ای پیکربندی می‌کنند که کلاینت گیت از دانلود اشیاء blob خودداری کند، مگر اینکه برای یک عملیات محلی مورد نیاز باشند. این در ابتدا بدین معناست که کلون و دریافت‌های بعدی (fetches)، کامیت‌ها و درخت‌های در دسترس را دانلود می‌کنند اما هیچ blobای دانلود نمی‌شود. عملیات بعدی که اشاره‌گر HEAD را تغییر می‌دهند، مانند git checkout یا git merge، ممکن است برای تکمیل عملیات خود نیاز به دانلود blobهای گمشده داشته باشند.

در بدترین حالت‌ها، دستوراتی که تفاضل (diff) بلاب‌ها را محاسبه می‌کنند، مانند git blame، بسیار کند می‌شوند زیرا برای تامین شیء ناموجود به محض نیاز دستور گیت، blobهای گمشده را در قالب درخواست‌های تک‌بلابی دانلود می‌کنند. این امر منجر به درخواست‌های دانلود متعدد می‌شود و سرور گیت امکان ارائه فشرده‌سازی دلتا (delta compression) روی آن اشیاء را نخواهد داشت.

دستور git backfill روشی را برای کاربر فراهم می‌کند تا از گیت درخواست کند blobهای گمشده را (با فیلترهای اختیاری) دانلود کند، به طوری که blobهای گمشده‌ای که نسخه‌های پیشین فایل‌ها را نشان می‌دهند بتوانند به‌صورت دسته‌ای دانلود شوند. دستور backfill تلاش می‌کند تا با گروه‌بندی blobهایی که در یک مسیر یکسان قرار دارند، این درخواست را بهینه‌سازی کند که امید می‌رود منجر به فشرده‌سازی دلتای مناسب در packfile ارسال‌شده توسط سرور شود.

به این ترتیب، git backfill سازوکاری برای تقسیم یک کلون بزرگ به بخش‌های کوچک‌تر ارائه می‌دهد. شروع با یک کلون جزئی بدون بلاب با git clone --filter=blob:none و سپس اجرای git backfill در مخزن محلی، راهکاری فراهم می‌آورد تا به جای دانلود کل مخزن در زمان کلون کردن، تمامی اشیاء قابل دسترس از طریق چند فراخوانی شبکه کوچک‌تر دانلود شوند.

به‌طور پیش‌فرض، git backfill تمام blobهای قابل دسترس از کامیت HEAD را دانلود می‌کند. این مجموعه می‌تواند با استفاده از گزینه‌های مختلف زیر محدود یا گسترش یابد.

این دستور آزمایشی است. رفتار آن ممکن است در آینده تغییر کند.

--min-batch-size=<n>

حداقل اندازه یک دسته از اشیای گمشده برای درخواست از سرور را تعیین می‌کند. ممکن است آخرین مجموعه از blobهای دیده‌شده در یک مسیر مشخص از این اندازه فراتر رود. اندازه دسته‌ای حداقل پیش‌فرض 50,000 است.

--sparse, --no-sparse

تنها اشیایی را دانلود می‌کند که در مسیری مطابق با sparse-checkout فعلی ظاهر شوند. اگر ویژگی sparse-checkout فعال باشد، گزینه --sparse فرض می‌شود و می‌توان آن را با --no-sparse غیرفعال کرد.

--include-edges, --no-include-edges

اشیاء blob حاصل از کامیت‌های مرزی (boundary commits) را در فرآیند backfill لحاظ می‌کند. برای آماده‌سازی دستوراتی مانند git log -p A..B یا git replay --onto TARGET A..B، جایی که A..B به‌طور معمول A را حذف می‌کند اما به blobهای A نیز نیاز دارید، مفید است. گزینه --include-edges پیش‌فرض است.

<revision-range>

فقط blobهای قابل دسترس از کامیت‌ها در محدوده بازنگری مشخص‌شده را دانلود (backfill) می‌کند. هنگامی که هیچ <revision-range> مشخص نشده باشد، پیش‌فرض آن HEAD است (یعنی تمام تاریخچه منتهی به کامیت فعلی). برای فهرست کاملی از روش‌های نگارش <revision-range>، بخش "Specifying Ranges" در gitrevisions(7) را ببینید.

شما همچنین می‌توانید از گزینه‌های محدودکننده کامیت که برای git-rev-list(1) قابل فهم هستند مانند --first-parent، --since یا مشخص‌کننده‌های مسیر (pathspecs) استفاده کنید.

بیشتر گزینه‌های --filter=<spec> با هدف git backfill همخوانی ندارند و کار نمی‌کنند، اما فیلتر sparse:<oid> تعبیه شده است تا مجموعه‌ای متمرکز از مسیرها را برای دانلود فراهم کند که متمایز از گزینه --sparse است.

git-clone(1), git-rev-list(1)

بخشی از مجموعه git(1)

2026-06-29 Git 2.55.0