استكشاف مجلد .git
رأينا في الدرس السابق أن Git يعتمد على مكونات داخلية مثل الـ Index و الـ Object Database و الـ References. لكن أين يحتفظ بهذه المكونات؟
لنبدأ بإنشاء مستودع جديد:
git initنفذ git init ثم اقرأ ملف HEAD بالأمر cat .git/HEAD. ابحث في شجرة الملفات عن المجلدين objects و refs. هل ظهر ملف index أيضا؟
بعد تنفيذ الأمر ستبدو بنية المشروع هكذا:
project/
├── .git/
├── app.js
└── README.mdبعد إنشاء مجلد .git يتعامل Git مع المشروع على أنه مستودع (Repository).
ماذا يوجد داخل .git؟
إذا استعرضنا المجلد فسنجد فيه عناصر عديدة. هذه أهم العناصر التي نحتاج إليها الآن:
.git/
├── HEAD
├── objects/
└── refs/قد تبدو هذه العناصر غامضة الآن لكنها ستتكرر معنا في بقية الدورة. لا نحتاج في هذا الدرس إلى تفاصيل كل عنصر. يكفي أن نعرف مكانه داخل المستودع و دوره العام.
ملف HEAD
ابدأ بملف .git/HEAD. يستخدم مختبرنا main اسما للفرع الافتراضي. على جهازك قد يختلف الاسم بحسب إصدار Git و إعداداته. في المختبر ستجد هذا السطر بعد git init:
ref: refs/heads/mainلا يوجد أي Commit بعد لكن HEAD يحمل مسار الفرع الذي سيستقبل أول Commit. سنعود إلى هذا الملف لاحقا عندما ندرس الفروع و التنقل داخل تاريخ المستودع.
مجلد objects
بجوار HEAD ستجد مجلد .git/objects. هذا هو الـ Object Database التي رأيناها في الدرس السابق. يخزن Git هنا البيانات التي يعتمد عليها لإدارة المستودع و تتبع تغيراته.
مجلد refs
أما مجلد .git/refs فيستخدمه Git لتنظيم المراجع (References) التي تساعده على الوصول إلى بيانات المستودع. سنعود إليه لاحقا عندما نرى كيف تعمل الفروع و المراجع.
لماذا يهمنا مجلد .git؟
عندما ننفذ أوامر مثل:
git add
git commit
git branchتتعامل بعض أوامر Git مع ملفات المشروع و بيانات .git معا. يقرأ git add مثلا ملفات من الـ Working Directory ثم يكتب بيانات جديدة داخل .git. أما مجلد .git نفسه فيحتوي على بيانات المستودع الداخلية. و من بينها الـ Object Database و المراجع و الإعدادات.
في الدرس التالي سندخل إلى مجلد objects و نرى كيف يحفظ Git محتوى ملف واحد.