Git index یک منطقه staging بین پوشه محل کار و مخزن است که برای آمادهسازی مجموعهای از تغییرات برای commit استفاده میشود. برای درک بهتر، ابتدا باید پوشه کاری (working directory) و مخزن (repository) را بشناسیم.
سه مکان در Git وجود دارد که تغییرات فایل میتواند در آنها باشد: پوشه کاری، ناحیه Staging و مخزن.
Working Directory
وقتی روی پروژه خود کار میکنید و تغییراتی ایجاد میکنید، این تغییرات در پوشه کاری پروژه شما روی سیستم فایل باقی میمانند. تا زمانی که تغییرات را به ناحیه staging اضافه نکنید، فقط در پوشه کاری موجود هستند.
Staging Area
ناحیه staging را میتوان به عنوان پیشنمایش commit بعدی در نظر گرفت. زمانی که یک git commit
ایجاد میکنید، Git تغییرات موجود در این ناحیه را میگیرد و یک commit جدید میسازد. شما میتوانید تغییرات را به ناحیه staging اضافه یا از آن حذف کنید. اگرچه، Git دایرکتوری جداگانهای برای Staging ندارد و برای ذخیره تغییرات از فایلی به نام index استفاده میکند.
Repository
Repository یک ساختار داده است که Git برای ذخیره متادیتا و تاریخچه تغییرات فایلها و دایرکتوریها استفاده میکند. هر پروژه در Git میتواند یک مخزن جداگانه داشته باشد که تمام دادههای مربوط به پروژه را در خود نگه میدارد.
با دستور git status
میتوانید محتوای index را بررسی کنید. این دستور نشان میدهد کدام فایلها در staging قرار دارند، کدام تغییر یافتهاند اما هنوز staging نشدهاند و کدام فایلها هنوز ردیابی نمیشوند.
ایندکس یک فایل است و دایرکتوری نیست، بنابراین Git اشیاء را در آن ذخیره نمیکند بلکه اطلاعات مربوط به هر فایل را نگهداری میکند. این اطلاعات شامل موارد زیر است:
- mtime: زمان آخرین تغییر فایل.
- file: نام فایل.
- Wdir: نسخه فایل در پوشه کاری.
- Stage: نسخه فایل در index.
- Repo: نسخه فایل در مخزن.
در نهایت، Git دایرکتوری کاری شما را با محتوای commit که HEAD به آن اشاره میکند هماهنگ میسازد.