GIT-INDEX-PACK(1) Git Manual GIT-INDEX-PACK(1)

git-index-pack - ساخت فایل ایندکس بسته برای یک فایل آرشیو بسته موجود

git index-pack [-v] [-o <index-file>] [--[no-]rev-index] <pack-file>
git index-pack --stdin [--fix-thin] [--keep] [-v] [-o <index-file>]
                  [--[no-]rev-index] [<pack-file>]

یک آرشیو بسته (.pack) را از فایل مشخص‌شده می‌خواند، یک فایل ایندکس بسته (.idx) برای آن می‌سازد، و به‌صورت اختیاری یک ایندکس معکوس (.rev) برای بسته مشخص‌شده می‌نویسد. آرشیو بسته، همراه با ایندکس بسته، سپس می‌تواند در دایرکتوری objects/pack/ یک مخزن گیت قرار داده شود.

-v

نمایش جزئیات درباره آنچه در حال انجام است، از جمله وضعیت پیشرفت کار.

-o <index-file>

ایندکس بسته تولیدشده را در فایل مشخص‌شده می‌نویسد. بدون این گزینه، نام فایل ایندکس بسته از نام فایل آرشیو بسته با جایگزین کردن .pack با .idx ساخته می‌شود (و اگر نام آرشیو بسته به .pack ختم نشود، برنامه با خطا مواجه خواهد شد).

--rev-index, --no-rev-index

هنگامی که این فلگ مشخص شود، یک ایندکس معکوس (یک فایل .rev) متناظر با بسته داده‌شده تولید می‌کند. اگر --verify داده شود، از صحت ایندکس معکوس موجود اطمینان حاصل می‌کند. این گزینه بر pack.writeReverseIndex اولویت دارد.

--stdin

هنگامی که این فلگ مشخص شود، بسته به‌جای آن از ورودی استاندارد (stdin) خوانده شده و سپس یک نسخه از آن در <pack-file> نوشته می‌شود. اگر <pack-file> مشخص نشده باشد، بسته با یک نام پیش‌فرض که از روی محتوای بسته تعیین می‌شود در دایرکتوری objects/pack/ مخزن جاری گیت نوشته خواهد شد. اگر <pack-file> مشخص نشده باشد، استفاده از --keep را در نظر بگیرید تا از شرایط رقابتی (race condition) بین این فرآیند و git repack جلوگیری شود.

--fix-thin

ترمیم یک بسته «باریک» (thin pack) تولیدشده توسط git pack-objects --thin (برای جزئیات بیشتر به git-pack-objects(1) مراجعه کنید) از طریق افزودن اشیاء حذف‌شده‌ای که اشیاء دلتا بر پایه آن‌ها هستند به بسته. این گزینه فقط در ترکیب با --stdin کاربرد دارد.

--keep

پیش از انتقال ایندکس به مقصد نهایی‌اش، یک فایل .keep خالی برای فایل بسته مرتبط ایجاد می‌کند. این گزینه معمولاً با --stdin ضروری است تا از حذف بسته و ایندکس تازه‌ساخته‌شده توسط یک فرآیند همزمان git repack پیش از اینکه ارجاع‌ها (refs) بتوانند برای استفاده از اشیاء موجود در بسته به‌روزرسانی شوند، جلوگیری کند.

--keep=<msg>

مانند --keep، پیش از انتقال ایندکس به مقصد نهایی یک فایل .keep ایجاد می‌کند. با این حال، به‌جای ایجاد یک فایل خالی، <msg> را به همراه یک خط جدید (LF) در فایل .keep قرار می‌دهد. پیام <msg> می‌تواند بعداً در تمام فایل‌های .keep جستجو شود تا مواردی را که کارایی خود را از دست داده‌اند شناسایی کند.

--index-version=<version>[,<offset>]

این گزینه فقط برای استفاده در مجموعه آزمون‌ها در نظر گرفته شده است. این امکان را می‌دهد که نسخه ایندکس بسته تولیدشده را اجبار کنید، و مدخل‌های ۶۴ بیتی ایندکس را برای اشیاء واقع در بالاتر از آفست داده‌شده اجباری نمایید.

--strict[=<msg-id>=<severity>...]

خروج با خطا در صورتی که بسته حاوی اشیاء یا پیوندهای خراب باشد. یک فهرست اختیاری جداشده با کاما از <msg-id>=<severity> می‌تواند ارسال شود تا شدت برخی از مشکلات احتمالی را تغییر دهد، به عنوان مثال، --strict="missingEmail=ignore,badTagName=error". برای اطلاعات بیشتر درباره مقادیر ممکن <msg-id> و <severity> به مدخل مربوط به گزینه‌های پیکربندی fsck.<msg-id> در git-fsck(1) مراجعه کنید.

--progress-title

فقط برای استفاده داخلی.

عنوان نوار پیشرفت را تنظیم می‌کند. این عنوان به طور پیش‌فرض "Receiving objects" و هنگام مشخص شدن --stdin برابر "Indexing objects" است.

--check-self-contained-and-connected

خروج با خطا در صورتی که بسته حاوی پیوندهای خراب باشد. فقط برای استفاده داخلی.

--fsck-objects[=<msg-id>=<severity>...]

خروج با خطا در صورتی که بسته حاوی اشیاء خراب باشد، اما بر خلاف --strict، به دلیل پیوندهای خراب متوقف نمی‌شود. اگر بسته حاوی درختی باشد که به یک blob بنام .gitmodules که وجود ندارد اشاره می‌کند، هش آن blob را (برای بررسی توسط فراخواننده) پس از هشی که در نام فایل pack/idx قرار می‌گیرد چاپ می‌کند (بخش «نکات» را ببینید).

یک فهرست اختیاری جداشده با کاما از <msg-id>=<severity> می‌تواند برای تغییر شدت برخی مشکلات احتمالی ارسال شود، به عنوان مثال، --fsck-objects="missingEmail=ignore,badTagName=ignore". برای اطلاعات بیشتر درباره مقادیر ممکن <msg-id> و <severity> به مدخل مربوط به گزینه‌های پیکربندی fsck.<msg-id> در git-fsck(1) مراجعه کنید.

--threads=<n>

تعداد نخ‌ها را برای ایجاد هنگام حل دلتاها مشخص می‌کند. این نیاز دارد که index-pack با pthreads کامپایل شده باشد، در غیر این صورت این گزینه با یک هشدار نادیده گرفته می‌شود. هدف از این گزینه کاهش زمان بسته‌بندی در ماشین‌های چندپردازنده‌ای است. با این حال، مقدار حافظه مورد نیاز برای پنجره جستجوی دلتا در تعداد نخ‌ها ضرب می‌شود. تعیین 0 باعث می‌شود گیت تعداد پردازنده‌ها را به‌طور خودکار تشخیص داده و حداکثر از ۳ نخ استفاده کند.

--max-input-size=<size>

خروج با خطا در صورتی که حجم بسته بزرگتر از <size> باشد.

--object-format=<hash-algorithm>

فرمت شیء مشخص‌شده (الگوریتم هش) را برای بسته تعیین می‌کند. مقادیر معتبر عبارتند از sha1 و (در صورت فعال بودن) sha256. مقدار پیش‌فرض، الگوریتم مخزن فعلی است (تنظیم‌شده توسط extensions.objectFormat)، یا sha1 اگر هیچ مقداری تنظیم نشده باشد یا خارج از یک مخزن باشد.

این گزینه نمی‌تواند همراه با --stdin استفاده شود.

نکته: در حال حاضر هیچ‌گونه سازگاری متقابل میان مخازن SHA-256 و مخازن SHA-1 وجود ندارد.

از نظر تاریخی، ما هشدار می‌دادیم که مخازن SHA-256 ممکن است بعداً در زمان معرفی چنین ویژگی‌های تعامل‌پذیری به تغییرات ناسازگار با گذشته نیاز داشته باشند. امروزه، ما تنها انتظار تغییرات سازگار را داریم. علاوه بر این، در صورتی که چنین تغییراتی ضروری تشخیص داده شوند، می‌توان انتظار داشت که مخازن SHA-256 ایجادشده با گیت امروزی توسط نسخه‌های آینده گیت بدون از دست رفتن داده‌ها قابل استفاده باشند.

--promisor[=<message>]

پیش از ثبت نهایی ایندکس بسته، یک فایل .promisor برای این بسته ایجاد می‌کند. به‌ویژه هنگام نوشتن یک بسته promisor با --fix-thin مفید است زیرا نام بسته تا زمانی که بسته به طور کامل نوشته نشود نهایی نیست. اگر یک <message> ارائه شود، آن محتوا برای مراجعات آینده در فایل .promisor نوشته خواهد شد. برای اطلاعات بیشتر به partial clone[1] مراجعه کنید.

همچنین، اگر اشیایی در بسته داده‌شده وجود داشته باشند که به اشیاء غیر promisor (در مخزن) ارجاع دهند، آن اشیاء غیر promisor را در یک بسته promisor بازبسته‌بندی می‌کند. این امر از وضعیتی که در آن یک مخزن دارای اشیاء غیر promisor باشد که از طریق اشیاء promisor قابل دسترسی هستند جلوگیری می‌کند.

نیازمند این است که <pack-file> مشخص نشود.

پس از ایجاد ایندکس، هشی که در نام فایل pack/idx قرار می‌گیرد در stdout چاپ می‌شود. اگر از --stdin نیز استفاده شده باشد، در این صورت پیشوند "pack\t" به آن اضافه می‌شود، یا اگر یک فایل .keep جدید با موفقیت ایجاد شده باشد پیشوند "keep\t" خواهد داشت. این برای حذف فایل .keep که به عنوان قفل برای جلوگیری از شرایط رقابتی با git repack که پیش‌تر ذکر شد استفاده شده، مفید است.

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

1.
partial clone
file:///usr/share/doc/git-doc/technical/partial-clone.html
2026-06-29 Git 2.55.0