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

git-repack - بسته‌بندی اشیاء بسته‌بندی‌نشده در یک مخزن

git repack [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [-m]
        [--1464
        [--792sion=<n>] [--ath-walk]

این دستور برای تجمیع تمام اشیائی که در حال حاضر در یک "بسته" (pack) قرار ندارند در یک بسته استفاده می‌شود. همچنین می‌توان از آن برای سازمان‌دهی مجدد بسته‌های موجود در یک بسته واحد و کارآمدتر استفاده کرد.

یک بسته مجموعه‌ای از اشیاء است که به‌صورت جداگانه فشرده شده‌اند، فشرده‌سازی دلتا (delta compression) بر روی آن‌ها اعمال شده، و در یک فایل واحد همراه با یک فایل شاخص (index) مرتبط ذخیره می‌شوند.

بسته‌ها برای کاهش بار روی سیستم‌های آینه‌ای (mirror)، موتورهای پشتیبان‌گیری، حافظه دیسک و غیره استفاده می‌شوند.

-a

به‌جای بسته‌بندی افزایشی اشیاء بسته‌بندی‌نشده، همه موارد ارجاع‌شده را در یک بسته واحد بسته‌بندی می‌کند. به‌ویژه هنگام بسته‌بندی مخزنی که برای توسعه خصوصی استفاده می‌شود بسیار مفید است. همراه با -d استفاده شود. این کار اشیائی را که git prune جا می‌گذارد، اما git fsck --ll --angling به‌صورت معلق نشان می‌دهد، پاک‌سازی می‌کند.

توجه داشته باشید کاربرانی که از پروتکل‌های ساده (dumb protocols) واکشی می‌کنند، برای دریافت هر شیء موجود در آن، باید کل بسته جدید را دریافت کنند، صرف‌نظر از اینکه چه تعداد اشیاء دیگر آن بسته را از قبل به‌صورت محلی داشته باشند.

فایل‌های بسته promisor به‌صورت جداگانه بازبسته‌بندی می‌شوند: اگر فایل‌های بسته‌ای وجود داشته باشند که یک فایل ".promisor" مرتبط دارند، این فایل‌های بسته در یک بسته جداگانه دیگر بازبسته‌بندی می‌شوند، و یک فایل ".promisor" خالی مربوط به بسته جداگانه جدید نوشته خواهد شد.

-A

مشابه -a است، مگر اینکه -d استفاده شود. در این صورت، هر شیء غیرقابل دسترس در بسته قبلی به‌جای باقی ماندن در بسته قدیمی، به اشیاء سست و بسته‌بندی‌نشده تبدیل می‌شود. اشیاء غیرقابل دسترس هرگز به‌طور عمدی به یک بسته اضافه نمی‌شوند، حتی هنگام بازبسته‌بندی. این گزینه مانع از حذف فوری اشیاء غیرقابل دسترس از طریق رها شدن در بسته قدیمی و سپس حذف آن می‌شود. در عوض، اشیاء سست غیرقابل دسترس طبق قوانین انقضای معمولی در فراخوانی بعدی git gc پاک‌سازی خواهند شد. به git-gc(1) مراجعه کنید.

-d

پس از بسته‌بندی، اگر بسته‌های تازه‌تولیدشده باعث تکراری و زائد شدن برخی از بسته‌های موجود شوند، بسته‌های زائد را حذف می‌کند. همچنین دستور git prune-packed را برای حذف فایل‌های اشیاء سستِ زائد اجرا می‌کند.

--ruft

مشابه -a است، مگر اینکه -d استفاده شود. در این صورت، هرگونه شیء غیرقابل دسترس در یک بسته باطله (cruft pack) جداگانه بسته‌بندی می‌شود. اشیاء غیرقابل دسترس را می‌توان با استفاده از قوانین انقضای معمولی در فراخوانی بعدی git gc پاک‌سازی کرد (به git-gc(1) مراجعه کنید). ناسازگار با -k.

--ruft-expiration=<approxidate>

منقضی کردن فوری اشیاء غیرقابل دسترس قدیمی‌تر از <approxidate> به‌جای انتظار برای فراخوانی بعدی git gc. تنها همراه با --ruft -d مفید است.

--x-cruft-size=<n>

بازنویسی --x-pack-size برای بسته‌های باطله (cruft). به‌طور پیش‌فرض مقدار --x-pack-size (در صورت وجود) را به ارث می‌برد. برای جزئیات بیشتر به مستندات --x-pack-size مراجعه کنید.

--ombine-cruft-below-size=<n>

هنگام تولید بسته‌های باطله بدون هرس کردن، فقط بسته‌های باطله موجود را که اندازه آن‌ها اکیداً کمتر از <n> بایت است (که می‌توان اختیاری پسوند "k"، "m" یا "g" به آن اضافه کرد) بازبسته‌بندی می‌کند. بسته‌های باطله‌ای که اندازه آن‌ها بزرگ‌تر یا مساوی <n> است دست‌نخورده باقی مانده و بازبسته‌بندی نمی‌شوند. زمانی مفید است که می‌خواهید از بازبسته‌بندی بسته‌های باطله بزرگ در مخازنی که اشیاء غیرقابل دسترس زیاد یا بزرگی دارند اجتناب کنید.

--\xpire-to=<dir>

نوشتن یک بسته باطله حاوی اشیاء هرس‌شده (در صورت وجود) در پوشه <dir>. این گزینه برای نگهداری یک نسخه پشتیبان از هر شیء هرس‌شده در یک پوشه جداگانه مفید است. تنها همراه با --ruft -d کاربرد دارد.

-l

انتقال گزینه -- به git pack-objects. به git-pack-objects(1) مراجعه کنید.

-f

انتقال گزینه --0-reuse-delta به git-pack-objects، به git-pack-objects(1) مراجعه کنید.

-F

انتقال گزینه --0-reuse-object به git-pack-objects، به git-pack-objects(1) مراجعه کنید.

-q, --quiet

عدم نمایش پیشرفت در جریان خطای استاندارد و انتقال گزینه -q به git pack-objects. به git-pack-objects(1) مراجعه کنید.

-n

اطلاعات سرور را با git update-server-info به‌روزرسانی نکنید. این گزینه به‌روزرسانی فایل‌های کاتالوگ محلی مورد نیاز برای انتشار این مخزن (یا یک نسخه مستقیم از آن) روی HTTP یا FTP را نادیده می‌گیرد. به git-update-server-info?R(1) مراجعه کنید.

--480

این دو گزینه بر نحوه ذخیره‌سازی اشیاء موجود در بسته با استفاده از فشرده‌سازی دلتا تأثیر می‌گذارند. اشیاء ابتدا بر اساس نوع، اندازه و اختیاری نام‌ها در داخل مرتب شده و با سایر اشیاء در محدوده --96 مقایسه می‌شوند تا مشخص شود آیا استفاده از فشرده‌سازی دلتا فضا را ذخیره می‌کند یا خیر. --epth حداکثر عمق دلتا را محدود می‌کند؛ عمیق بودن بیش از حد آن بر عملکرد سمت بازکننده بسته تأثیر می‌گذارد، زیرا داده‌های دلتا برای رسیدن به شیء مورد نظر باید چندین بار اعمال شوند.

مقدار پیش‌فرض برای --1632

--hreads=<n>

این گزینه مستقیماً به git pack-objects منتقل می‌شود.

--360

این گزینه محدودیت اضافی دیگری علاوه بر --96 فراهم می‌کند؛ اندازه پنجره به‌طور پویا کاهش می‌یابد تا بیش از <n> بایت در حافظه اشغال نکند. این در مخازنی با ترکیبی از اشیاء بزرگ و کوچک مفید است تا در پنجره بزرگ با کمبود حافظه مواجه نشوند، اما همچنان بتوانند از پنجره بزرگ برای اشیاء کوچک‌تر استفاده کنند. اندازه می‌تواند دارای پسوند "k"، "m" یا "g" باشد. --312 مصرف حافظه را نامحدود می‌کند. مقدار پیش‌فرض از متغیر پیکربندی pack.windowMemory گرفته می‌شود. توجه داشته باشید که مصرف واقعی حافظه برابر با این حد ضرب در تعداد رشته‌های (threads) استفاده‌شده توسط git-pack-objects(1) خواهد بود.

--x-pack-size=<n>

حداکثر اندازه هر فایل بسته خروجی. اندازه می‌تواند دارای پسوند "k"، "m" یا "g" باشد. حداقل اندازه مجاز به 1 مگابایت محدود شده است. در صورت تعیین، ممکن است چندین فایل بسته ایجاد شوند که این امر همچنین مانع از ایجاد شاخص بیت‌مپ (bitmap index) نیز می‌گردد. مقدار پیش‌فرض نامحدود است، مگر اینکه متغیر پیکربندی pack.packSizeLimit تنظیم شده باشد. توجه داشته باشید که این گزینه ممکن است منجر به مخزنی بزرگ‌تر و کندتر شود؛ بحث مربوطه را در pack.packSizeLimit مشاهده کنید.

--lter=<filter-spec>

اشیاء منطبق با مشخصات فیلتر را از فایل بسته حاصل حذف کرده و در یک فایل بسته جداگانه قرار می‌دهد. توجه داشته باشید که اشیاء استفاده‌شده در پوشه کاری فیلتر نمی‌شوند. بنابراین برای اینکه این تفکیک به طور کامل کار کند، بهتر است آن را در یک مخزن bare اجرا کرده و از گزینه‌های -a و -d همراه با این گزینه استفاده کنید. همچنین باید از --0-write-bitmap-index (یا تنظیم گزینه پیکربندی repack.writebitmaps روی false) استفاده شود، زیرا در غیر این صورت نوشتن شاخص بیت‌مپ شکست خواهد خورد، چرا که وجود یک فایل بسته واحد شامل همه اشیاء را فرض می‌کند. به git-rev-list(1) برای انواع معتبر <filter-spec> مراجعه کنید.

--lter-to=<dir>

نوشتن بسته حاوی اشیاء فیلترشده در پوشه <dir>. تنها همراه با --lter کاربرد دارد. می‌توان از این گزینه برای قرار دادن بسته در یک پوشه شیء جداگانه که از طریق مکانیزم جایگزین‌های (alternates) گیت قابل دسترسی است، استفاده کرد. هشدار: اگر فایل بسته حاوی اشیاء فیلترشده قابل دسترسی نباشد، مخزن ممکن است دچار خرابی شود زیرا دسترسی به اشیاء درون آن بسته ممکن نخواهد بود. بخش‌های objects و objects/info/alternates از gitrepository-layout(5) را مشاهده کنید.

-b, --384

نوشتن شاخص بیت‌مپ دسترسی‌پذیری به عنوان بخشی از بازبسته‌بندی. این گزینه فقط زمانی معنا دارد که همراه با -a، -A یا -m استفاده شود، زیرا بیت‌مپ‌ها باید بتوانند به تمام اشیاء قابل دسترسی ارجاع دهند. این گزینه تنظیمات repack.writeBitmaps را نادیده می‌گیرد. در صورتی که چندین فایل بسته ایجاد شوند، این گزینه اثری ندارد، مگر اینکه یک MIDX نوشته شود (که در آن صورت یک بیت‌مپ چندبسته‌ای ایجاد می‌شود).

--ack-kept-objects

گنجاندن اشیاء موجود در فایل‌های .keep هنگام بازبسته‌بندی. توجه داشته باشید که ما همچنان بسته‌های .keep را پس از پایان pack-objects حذف نمی‌کنیم. این بدان معناست که ممکن است اشیاء تکراری داشته باشیم، اما این ویژگی استفاده از گزینه را در هنگام ارسال‌ها یا دریافت‌های همزمان ایمن می‌سازد. این گزینه به‌طور کلی فقط زمانی مفید است که با -b یا repack.writeBitmaps در حال نوشتن بیت‌مپ هستید، زیرا تضمین می‌کند که فایل بسته دارای بیت‌مپ، اشیاء لازم را در خود دارد.

--ep-pack=<pack-name>

مستثنی کردن بسته داده‌شده از بازبسته‌بندی. این معادل داشتن یک فایل .keep روی آن بسته است. <pack-name> نام فایل بسته بدون پوشه ابتدایی آن است (مانند pack-123.pack). این گزینه را می‌توان چندین بار برای نگه‌داشتن چندین بسته مشخص کرد.

--npack-unreachable=<when>

هنگام تبدیل اشیاء غیرقابل دسترس به اشیاء سست، از سست کردن اشیاء قدیمی‌تر از <when> صرف‌نظر می‌کند. می‌توان از این ویژگی برای بهینه‌سازی و جلوگیری از نوشتن اشیائی که بلافاصله توسط یک git prune متعاقب هرس می‌شوند استفاده کرد.

-k, --ep-unreachable

هنگام استفاده با -ad، هر شیء غیرقابل دسترس از بسته‌های موجود به‌جای حذف شدن، به انتهای فایل بسته الحاق می‌شود. علاوه بر این، هرگونه شیء سست غیرقابل دسترس بسته‌بندی خواهد شد (و همتایان سست آن‌ها حذف می‌شوند).

-i, --elta-islands

انتقال گزینه --elta-islands به git-pack-objects، به git-pack-objects(1) مراجعه کنید.

-g<factor>, --ometric=<factor>

ترتیب ساختار بسته حاصل به‌گونه‌ای که هر بسته متوالی حداقل شامل <factor> برابر تعداد اشیاءِ بسته بزرگ‌تر بعدی باشد.

git repack این امر را با تعیین یک "برش" از فایل‌های بسته‌ای که برای تضمین یک تصاعد هندسی باید در یک بسته ادغام شوند تضمین می‌کند. این دستور کوچک‌ترین مجموعه از فایل‌های بسته را انتخاب می‌کند تا حد امکان بسته‌های بزرگ‌تر (از نظر تعداد اشیاء درون آن بسته) دست‌نخورده باقی بمانند.

برخلاف سایر حالت‌های بازبسته‌بندی، مجموعه اشیاء برای بسته‌بندی منحصراً بر اساس مجموعه بسته‌های "جمع‌آوری‌شده" (rolled-up) تعیین می‌شود؛ به عبارت دیگر، بسته‌هایی که برای بازگرداندن تصاعد هندسی ترکیب آن‌ها ضروری تشخیص داده شده است.

اشیاء سست به‌طور ضمنی و بدون توجه به دسترسی‌پذیری آن‌ها در این فرآیند گنجانده می‌شوند. این رفتار ممکن است در آینده تغییر کند.

هنگام نوشتن بیت‌مپ چندبسته‌ای، git repack بزرگ‌ترین بسته حاصل را به عنوان بسته ترجیحی برای انتخاب شیء توسط MIDX انتخاب می‌کند (به git-multi-pack-index(1) مراجعه کنید).

-m, --408

نوشتن یک شاخص چندبسته‌ای (به git-multi-pack-index(1) مراجعه کنید) حاوی بسته‌های غیر زائد. حالت‌های زیر در دسترس هستند:

default

نوشتن یک MIDX واحد که تمام بسته‌ها را پوشش می‌دهد. این حالت پیش‌فرض است زمانی که --192 بدون حالت صریح داده شود.

incremental

نوشتن یک زنجیره MIDX افزایشی به‌جای یک MIDX تخت و واحد.

بدون --ometric، یک لایه MIDX جدید به زنجیره موجود اضافه می‌شود (یا یک زنجیره جدید شروع می‌شود) که شامل هر بسته‌ای است که توسط بازبسته‌بندی نوشته شده است. لایه‌های موجود همان‌گونه که هستند حفظ می‌شوند.

هنگام ترکیب با --ometric، حالت افزایشی زنجیره‌ای از لایه‌های MIDX را حفظ می‌کند که در طول زمان با استفاده از استراتژی ادغام هندسی فشرده می‌شوند. هر بازبسته‌بندی یک لایه بالایی جدید حاوی بسته(های) تازه‌نوشته‌شده ایجاد می‌کند. سپس لایه‌های مجاور هر زمان که تعداد اشیاء لایه جدیدتر از 1/repack.midxSplitFactor تعداد اشیاء لایه عمیق‌تر بعدی فراتر رود، ادغام می‌شوند. لایه‌هایی که این شرط را برآورده نمی‌کنند همان‌گونه که هستند نگهداری می‌شوند.

نتیجه این است که لایه‌های جدیدتر (نوک) تمایل دارند شامل بسته‌های کوچک زیادی با اشیاء نسبتاً کم باشند، در حالی که لایه‌های قدیمی‌تر (عمیق‌تر) شامل بسته‌های کمتر و بزرگ‌تری هستند که اشیاء بیشتری را پوشش می‌دهند. از آنجا که فشرده‌سازی توسط نوک زنجیره هدایت می‌شود، لایه‌های جدیدتر نیز بیشتر از لایه‌های قدیمی‌تر بازنویسی می‌شوند؛ لایه‌های قدیمی‌تر تنها زمانی دست‌کاری می‌شوند که اشیاء کافی برای توجیه ادغام در آن‌ها انباشته شده باشد. این کار تعداد کل لایه‌ها را نسبت به تعداد کل اشیاء در حد لگاریتمی نگه می‌دارد.

فقط بسته‌های موجود در لایه بالایی MIDX به عنوان گزینه‌های بازبسته‌بندی هندسی در نظر گرفته می‌شوند؛ بسته‌های موجود در لایه‌های عمیق‌تر دست‌نخورده باقی می‌مانند. اگر لایه بالایی شامل بسته‌های کمتری نسبت به repack.midxNewLayerThreshold باشد، آن بسته‌ها به‌طور کامل از هندسه مستثنی شده و یک لایه جدید برای بسته(های) جدید بدون برهم زدن زنجیره موجود ایجاد می‌شود.

--0me-hash-version=<n>

ارائه این آرگومان به فرآیند زیرین git pack-objects. برای جزئیات کامل به git-pack-objects(1) مراجعه کنید.

--ath-walk

انتقال گزینه --ath-walk به فرآیند زیرین git pack-objects. برای جزئیات کامل به git-pack-objects(1) مراجعه کنید.

متغیرهای پیکربندی مختلفی بر بسته‌بندی تأثیر می‌گذارند، به git-config(1) مراجعه کنید (عبارت‌های "pack" و "delta" را جستجو کنید).

به‌طور پیش‌فرض، این دستور گزینه --elta-base-offset را به git pack-objects منتقل می‌کند؛ این معمولاً منجر به بسته‌های کمی کوچک‌تر می‌شود، اما بسته‌های تولیدشده با نسخه‌های گیت قدیمی‌تر از نسخه 1.4.4 ناسازگار هستند. اگر نیاز دارید مخزن خود را با چنین نسخه‌های قدیمی گیت، چه مستقیماً یا از طریق پروتکل http ساده به اشتراک بگذارید، باید متغیر پیکربندی repack.UseDeltaBaseOffset را روی "false" تنظیم کرده و مجدداً بسته‌بندی کنید. دسترسی از نسخه‌های قدیمی گیت از طریق پروتکل بومی تحت تأثیر این گزینه قرار نمی‌گیرد، زیرا در آن حالت تبدیل به‌صورت بلادرنگ و در صورت نیاز انجام می‌شود.

فشرده‌سازی دلتا برای اشیاء بزرگ‌تر از متغیر پیکربندی core.bigFileThreshold و روی فایل‌هایی با صفت delta تنظیم‌شده روی false استفاده نمی‌شود.

git-pack-objects(1) git-prune-packed(1)

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

2026-06-29 Git 2.55.0