GIT-MULTI-PACK-INDEX(1) راهنمای Git GIT-MULTI-PACK-INDEX(1)

git-multi-pack-index - نوشتن و اعتبارسنجی ایندکس‌های چندبسته‌ای

git multi-pack-index [<options>] write [--preferred-pack=<pack>]
                         [--[no-]bitmap] [--[no-]incremental] [--[no-]stdin-packs]
                         [--refs-snapshot=<path>] [--[no-]write-chain-file]
                         [--base=<checksum>]
git multi-pack-index [<options>] compact [--[no-]incremental]
                         [--[no-]bitmap] [--base=<checksum>] [--[no-]write-chain-file]
                         <from> <to>
git multi-pack-index [<options>] verify
git multi-pack-index [<options>] expire
git multi-pack-index [<options>] repack [--batch-size=<size>]

نوشتن یا اعتبارسنجی یک فایل ایندکس چندبسته‌ای (MIDX).

گزینه‌های خط فرمان زیر برای تمام زیردستورها قابل استفاده هستند:

--object-dir=<dir>

از دایرکتوری داده‌شده برای مکان اشیای Git استفاده می‌کند. دستور، مسیر <dir>/packs/multi-pack-index را برای فایل MIDX کنونی و مسیر <dir>/packs را برای فایل‌های بسته (pack-files) جهت ایندکس‌گذاری بررسی می‌کند.

<dir> باید یک جایگزین (alternate) برای مخزن فعلی باشد.

--progress, --no-progress

نمایش پیشرفت را به صراحت فعال یا غیرفعال می‌کند. اگر هیچ‌کدام مشخص نشود، در صورتی که خطای استاندارد به یک ترمینال متصل باشد، پیشرفت نمایش داده می‌شود. این گزینه‌ها توسط زیردستورهای write، verify، expire و repack پشتیبانی می‌شوند.

زیردستورهای زیر در دسترس هستند:

write

یک فایل MIDX جدید می‌نویسد. گزینه‌های زیر برای زیردستور write در دسترس هستند:

--preferred-pack=<pack>

در صورت مشخص شدن، هنگام وجود نسخه‌های تکراری از اشیا در بسته‌های دیگر، اولویت را به این بسته می‌دهد. موارد مشابه برای اشیایی که در بستهٔ ترجیحی یافت نمی‌شوند، همیشه به نفع نسخه‌ای که در بسته با بالاترین زمان تغییر (mtime) قرار دارد حل‌وفصل می‌شود. در صورت مشخص نشدن، بسته با کمترین mtime به صورت پیش‌فرض استفاده می‌شود. بستهٔ ترجیحی باید حداقل دارای یک شیء باشد.

--[no-]bitmap

کنترل می‌کند که آیا یک نگاشت بیتی (بیت‌مپ / bitmap) چندبسته‌ای نوشته شود یا خیر.

--stdin-packs

یک ایندکس چندبسته‌ای می‌نویسد که تنها شامل مجموعه‌ای از نام‌های پایه ایندکس بسته (pack index basenames) است که به صورت خط‌به‌خط از طریق stdin ارائه شده‌اند.

--refs-snapshot=<path>

همراه با --bitmap، به طور اختیاری فایلی را مشخص می‌کند که حاوی یک «عکس‌فوری از مراجع» (refs snapshot) است که پیش از بسته‌بندی مجدد (repacking) گرفته شده است.

یک عکس‌فوری از مراجع از OIDهای تفکیک‌شده با خط جدید تشکیل شده است که مربوط به نوک مراجع هستند و معمولاً توسط git repack پیش از تولید یک بسته جدید ایجاد می‌شود. یک خط ممکن است به طور اختیاری با نویسهٔ + آغاز شود تا نشان دهد مرجع متناظر با آن OID «ترجیحی» (preferred) است (به pack.preferBitmapTips در git-config(1) مراجعه کنید).

انتظار می‌رود فایل ارائه‌شده در <path> قابل خواندن باشد و می‌تواند شامل مقادیر تکراری باشد. (اگر یک OID داده‌شده بیش از یک بار تکرار شود، در صورتی که حداقل یک نمونه از آن با نشانگر ویژهٔ + شروع شود، به عنوان ترجیحی علامت‌گذاری می‌شود).

--incremental

یک فایل MIDX افزایشی (incremental) می‌نویسد که فقط حاوی اشیا و بسته‌هایی است که در لایهٔ MIDX موجود وجود ندارند. در صورت لزوم، فایل‌های MIDX غیرافزایشی را به حالت افزایشی مهاجرت می‌دهد.

--[no-]write-chain-file

هنگامی که به همراه --incremental استفاده شود، یک لایه MIDX جدید می‌نویسد اما فایل multi-pack-index-chain را به‌روزرسانی نمی‌کند. چکسام (checksum) لایه جدید در خروجی استاندارد چاپ می‌شود و به فراخواننده اجازه می‌دهد زنجیره را خودش سرهم کرده و بنویسد. به --incremental نیاز دارد.

--base=<checksum>

چکسام یک لایه MIDX موجود را برای استفاده به عنوان پایه هنگام نوشتن یک لایه افزایشی جدید مشخص می‌کند. مقدار ویژهٔ none نشان می‌دهد که لایه جدید نباید پایه‌ای داشته باشد (یعنی تبدیل به یک لایه ریشه می‌شود). به --no-write-chain-file نیاز دارد.

compact

یک لایهٔ MIDX جدید می‌نویسد که تنها شامل اشیا و بسته‌های موجود در محدودهٔ <from> تا <to> است، که هر دو آرگومان چکسام‌های لایه‌های موجود در زنجیره MIDX هستند.

--incremental

نتیجه را به جای نوشتن یک MIDX مستقل (stand-alone)، در یک زنجیره MIDX می‌نویسد.

--[no-]bitmap

کنترل می‌کند که آیا نگاشت بیتی چندبسته‌ای نوشته شود یا خیر.

--[no-]write-chain-file

هنگامی که به همراه --incremental استفاده شود، یک لایه MIDX فشرده‌شدهٔ جدید می‌نویسد اما فایل multi-pack-index-chain را به‌روزرسانی نمی‌کند. چکسام لایه جدید در خروجی استاندارد چاپ می‌شود. به --incremental نیاز دارد.

--base=<checksum>

چکسام یک لایه MIDX موجود را مشخص می‌کند تا به جای استفاده از والد بی‌واسطهٔ <from>، به عنوان پایه برای نتیجه فشرده‌شده استفاده شود. مقدار ویژهٔ none نشان می‌دهد که نتیجه نباید هیچ پایه‌ای داشته باشد.

توجه داشته باشید که دستور compact نیازمند نوشتن یک midx نسخه ۲ است که توسط نسخه‌های Git پیش از v2.54 قابل خواندن نیست.

verify

محتویات فایل MIDX را اعتبارسنجی می‌کند.

expire

فایل‌های بسته‌ای را که توسط فایل MIDX ردیابی می‌شوند اما هیچ شیئی از آن‌ها در MIDX ارجاع داده نشده است (به استثنای بسته‌های .keep و بسته‌های زائد/cruft) حذف می‌کند. پس از آن، فایل MIDX را دوباره بازنویسی می‌کند تا تمامی ارجاعات به این فایل‌های بسته حذف شوند.

نکته
این حالت با فایل‌های افزایشی MIDX ناسازگار است.

repack

یک فایل بسته جدید شامل اشیای موجود در فایل‌های بستهٔ کوچک ارجاع داده شده توسط multi-pack-index ایجاد می‌کند. اگر اندازه مشخص‌شده با آرگومان --batch-size=<size> صفر باشد، بسته‌ای شامل تمامی اشیای ارجاع‌داده‌شده توسط multi-pack-index ایجاد می‌کند. برای یک اندازه دسته (batch size) غیرصفر، فایل‌های بسته را با بررسی بسته‌ها از قدیمی‌ترین به جدیدترین انتخاب می‌کند و «اندازه مورد انتظار» (expected size) را با شمارش تعداد اشیای موجود در بسته که توسط multi-pack-index ارجاع داده شده‌اند محاسبه نموده، سپس بر تعداد کل اشیای موجود در بسته تقسیم و در اندازه بسته ضرب می‌کند. بسته‌هایی با اندازه مورد انتظار کمتر از اندازه دسته انتخاب می‌شوند تا زمانی که مجموعه بسته‌ها حداقل به اندازه دسته کل اندازه مورد انتظار برسند، یا تمامی فایل‌های بسته بررسی شوند. اگر تنها یک فایل بسته انتخاب شود، هیچ عملیاتی انجام نمی‌شود. در صورت ایجاد یک فایل بسته جدید، multi-pack-index را برای ارجاع به فایل بسته جدید بازنویسی می‌کند. اجرای بعدی دستور git multi-pack-index expire فایل‌های بسته‌ای را که بخشی از این دسته بودند حذف خواهد کرد.

اگر مقدار repack.packKeptObjects برابر با false باشد، هر فایل بسته‌ای که دارای فایل .keep مرتبط باشد برای دستهٔ بازبسته‌بندی (repack) انتخاب نخواهد شد.


نکته
این حالت با فایل‌های افزایشی MIDX ناسازگار است.

•نوشتن یک فایل MIDX برای فایل‌های بسته در دایرکتوری فعلی .git:
$ git multi-pack-index write
•نوشتن یک فایل MIDX برای فایل‌های بسته در دایرکتوری فعلی .git همراه با نگاشت بیتی (bitmap) متناظر:
$ git multi-pack-index write --preferred-pack=<pack> --bitmap
•نوشتن یک فایل MIDX برای فایل‌های بسته در یک مخزن شیء جایگزین (alternate object store):
$ git multi-pack-index --object-dir <alt> write
•اعتبارسنجی فایل MIDX برای فایل‌های بسته در دایرکتوری فعلی .git:
$ git multi-pack-index verify

برای اطلاعات بیشتر درباره قابلیت multi-pack-index و فرمت فایل آن، به The Multi-Pack-Index Design Document[1] و gitformat-pack(5) مراجعه کنید.

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

1.
The Multi-Pack-Index Design Document
file:///usr/share/doc/git-doc/technical/multi-pack-index.html
2026-06-29 Git 2.55.0