| GITFORMAT-LOOSE(5) | راهنمای Git | GITFORMAT-LOOSE(5) |
نام (NAME)
gitformat-loose - ساختار و قالب اشیاء منفرد (loose objects) در گیت
خلاصه دستور (SYNOPSIS)
$GIT_DIR/objects/[0-9a-f][0-9a-f]/* $GIT_DIR/objects/object-map/map-*.map
توضیحات (DESCRIPTION)
اشیاء منفرد (Loose objects) روشی هستند که گیت برای ذخیرهسازی اشیاء مستقل استفاده میکند، بهطوری که هر شیء به عنوان یک فایل مجزا نوشته میشود.
در طول چرخه حیات یک مخزن، اشیاء معمولاً در ابتدا به عنوان اشیاء منفرد نوشته میشوند. در نهایت، این اشیاء منفرد از طریق عملیات نگهداری مخزن (maintenance) در فایلهای بسته (packfiles) فشرده و جمعآوری میشوند تا استفاده از فضای دیسک بهینه شده و جستجوی این اشیاء سرعت یابد.
اشیاء منفرد (LOOSE OBJECTS)
هر شیء منفرد شامل یک پیشوند (prefix) است که بلافاصله پس از آن دادههای شیء قرار میگیرند. پیشوند شامل <type> <size>\0 است. مقدار <type> یکی از مقادیر blob، tree، commit یا tag است و size اندازه دادهها (بدون احتساب پیشوند) به عنوان یک عدد صحیح دهدهی در قالب اَسکی (ASCII) میباشد.
سپس کل محتوا (پیشوند به همراه دادهها) با الگوریتم zlib فشرده شده و دادههای فشرده درون فایل ذخیره میشوند. شناسه شیء (object ID) درهمسازی (هش) SHA-1 یا SHA-256 (بسته به پیکربندی) از دادههای غیرفشرده است.
فایل مربوط به شیء منفرد در پوشه objects ذخیره میشود، به این صورت که دو نویسه هگزادسیمال نخست شناسه شیء نام پوشه را تشکیل میدهند و نویسههای باقیمانده نام فایل خواهند بود. این کار برای قطعهبندی (sharding) دادهها و جلوگیری از قرارگیری فایلهای بیش از حد در یک پوشه واحد انجام میشود، زیرا برخی از سیستمهای فایل در صورت وجود تعداد بسیار زیادی فایل در یک پوشه دچار افت کارایی میشوند.
به عنوان نمونه، یک درخت تهی (empty tree) حاوی دادههای فشردهنشده tree 0\0 است و در یک مخزن SHA-256، شناسه شیء آن 6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321 خواهد بود و در مسیر $GIT_DIR/objects/6e/f19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321 ذخیره میگردد.
به طور مشابه، یک شیء blob که محتوای آن abc است، دارای دادههای غیرفشرده blob 3\0abc خواهد بود.
نگاشت اشیاء منفرد (LOOSE OBJECT MAPPING)
هنگامی که گزینه compatObjectFormat استفاده میشود، گیت باید یک نگاشت میان الگوریتم اصلی مخزن و الگوریتم سازگاری برای اشیاء منفرد و همچنین برخی اطلاعات کمکی ذخیره کند.
این نگاشت شامل مجموعهای از فایلها در مسیر $GIT_DIR/objects/object-map با پسوند .map است. بخش نام فایل پیش از پسوند، همان چکسام هش اصلی (یعنی همان که در extensions.objectformat مشخص شده) در قالب هگزادسیمال است.
دستور git gc ورودیهای موجود را مجدداً در یک فایل بستهبندی میکند و اشیاء غیرضروری مانند ورودیهای کمعمق (shallow) منسوخشده یا اشیاء منفردی که بستهبندی شدهاند را حذف مینماید.
قالب فایل به شرح زیر است. تمام مقادیر در ترتیب بایت شبکه (network byte order) هستند و تمام مقادیر ۴ بایتی و ۸ بایتی باید در فایل همتراز ۴ بایت (4-byte aligned) باشند؛ بنابراین ممکن است در برخی موارد به پدینگ NUL نیاز باشد. گیت همیشه از کمترین تعداد بایت NUL (شامل صفر) که برای پدینگ لازم است استفاده میکند تا نوشتن فایلها قطعی و معین (deterministic) باشد.
شش بیت پایین هر جدول فراداده شامل یک فیلد نوع است که دلیل ذخیرهسازی این شیء را نشان میدهد:
0
1
2
3
ممکن است در آینده دادههای دیگری در این فیلد ذخیره شود. بیتهایی که استفاده نمیشوند باید صفر باشند.
گیت (GIT)
بخشی از مجموعه git(1)
| 2026-06-29 | Git 2.55.0 |