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

git-pack-refs - بسته‌بندی سرشاخه‌ها و برچسب‌ها برای دسترسی کارآمدتر به مخزن

git pack-refs [--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]

به طور سنتی، نوک شاخه‌ها و برچسب‌ها (که در مجموع به عنوان مرجع‌ها یا refs شناخته می‌شوند) به صورت یک فایل به ازای هر مرجع در یک (زیر)پوشه زیر مسیر $GIT_DIR/refs ذخیره می‌شدند. در حالی که نوک بسیاری از شاخه‌ها مکرراً به‌روزرسانی می‌شوند، اکثر برچسب‌ها و نوک برخی شاخه‌ها هرگز تغییر نمی‌کنند. هنگامی که یک مخزن صدها یا هزاران برچسب دارد، این قالب «یک فایل به ازای هر مرجع» هم فضای ذخیره‌سازی را هدر می‌دهد و هم کارایی سیستم را کاهش می‌دهد.

این دستور برای حل مشکل فضای ذخیره‌سازی و کارایی، از طریق ذخیره کردن مراجع در یک فایل واحد با نام $GIT_DIR/packed-refs استفاده می‌شود. هنگامی که مرجعی در سلسله‌مراتب پوشه‌ای سنتی $GIT_DIR/refs یافت نشود، در این فایل جستجو شده و در صورت یافت شدن استفاده می‌شود.

به‌روزرسانی‌های بعدی شاخه‌ها همواره فایل‌های جدیدی در سلسله‌مراتب پوشه‌ای $GIT_DIR/refs ایجاد می‌کنند.

یک روش پیشنهادی برای کار با مخازنی که دارای مراجع بسیار زیادی هستند این است که یک بار مراجع آن را با --all بسته‌بندی کنید و گهگاه دستور git pack-refs را اجرا نمایید. برچسب‌ها بنا به تعریف ایستا هستند و انتظار نمی‌رود تغییر کنند. سرشاخه‌ها با اجرای اولیه pack-refs --all بسته‌بندی می‌شوند، اما تنها سرشاخه‌هایی که هم‌اکنون فعال هستند از حالت بسته خارج خواهند شد و اجرای بعدی pack-refs (بدون --all) آن‌ها را بدون بسته‌بندی باقی می‌گذارد.

--all

دستور به طور پیش‌فرض تمام برچسب‌ها و مراجعی را که پیش‌تر بسته‌بندی شده‌اند، بسته‌بندی کرده و سایر مراجع را دست‌نخورده باقی می‌گذارد. علت این است که شاخه‌ها معمولاً در حال توسعه فعال هستند و بسته‌بندی نوک آن‌ها کمکی به بهبود کارایی نمی‌کند. این گزینه باعث می‌شود تمامی مراجع، به استثنای مراجع پنهان، مراجع خراب و مراجع نمادین نیز بسته‌بندی شوند. برای مخازنی که شاخه‌های تاریخی متعددی دارند بسیار مفید است.

--no-prune

این دستور معمولاً مراجع منفرد را در سلسله‌مراتب $GIT_DIR/refs پس از بسته‌بندی حذف می‌کند. این گزینه به آن دستور می‌دهد که این کار را انجام ندهد.

--auto

مراجع را در صورت نیاز و بر اساس وضعیت کنونی پایگاه‌داده مراجع بسته‌بندی می‌کند. این رفتار به قالب مراجع مورداستفاده در مخزن بستگی دارد و ممکن است در آینده تغییر کند.
•"files": مراجع منفرد بر اساس نسبت مراجع منفرد به حجم فایل packed-refs درون این فایل بسته‌بندی می‌شوند. هر چه فایل packed-refs بزرگ‌تر باشد، مراجع منفرد بیشتری باید وجود داشته باشند تا بازبسته‌بندی انجام شود.
•"reftable": جدول‌ها به گونه‌ای فشرده می‌شوند که یک تصاعد هندسی را تشکیل دهند. برای دو جدول N و N+1، که در آن N+1 جدیدتر است، این ویژگی حفظ می‌شود که N حداقل دو برابر بزرگ‌تر از N+1 باشد. تنها جدول‌هایی که این ویژگی را نقض کنند فشرده‌سازی می‌شوند.

--include <pattern>

مراجع را بر اساس یک الگوی glob(7) بسته‌بندی می‌کند. تکرار این گزینه، الگوهای شمول را انباشته می‌کند. اگر مرجعی هم در --include و هم در --exclude آمده باشد، --exclude اولویت دارد. استفاده از --include به طور پیش‌فرض مانع از گنجاندن همه برچسب‌ها می‌شود. مراجع نمادین و مراجع خراب هرگز بسته‌بندی نخواهند شد. هنگامی که همراه با --all استفاده شود، بی‌اثر خواهد بود. از --no-include برای پاک‌سازی و بازنشانی فهرست الگوها استفاده کنید.

--exclude <pattern>

مراجعی را که با الگوی glob(7) داده‌شده مطابقت دارند بسته‌بندی نمی‌کند. تکرار این گزینه، الگوهای عدم شمول را انباشته می‌کند. از --no-exclude برای پاک‌سازی و بازنشانی فهرست الگوها استفاده کنید. اگر مرجعی پیش‌تر بسته‌بندی شده باشد، ذکر آن در --exclude باعث خروج آن از حالت بسته‌بندی نمی‌شود.

هنگامی که همراه با --all استفاده شود، تنها مراجع منفردی را که با هیچ‌یک از الگوهای --exclude ارائه‌شده تطبیق ندارند بسته‌بندی می‌کند.

هنگامی که همراه با --include استفاده شود، مراجع ارائه‌شده به --include منهای مراجعی که به --exclude ارائه شده‌اند، بسته‌بندی خواهند شد.

مستندات قدیمی‌تری که پیش از معرفی سازوکار packed-refs نوشته شده‌اند، ممکن است همچنان عباراتی مانند "فایل .git/refs/heads/<branch> وجود دارد" را زمانی به کار ببرند که منظورشان "شاخه <branch> وجود دارد" است.

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

2026-06-29 Git 2.55.0