كيف يرى Git المستودع؟
عندما تفتح المشروع ترى ملفات و مجلدات. أما Git فيعتمد على مجموعة من المكونات الداخلية لإدارة البيانات و التغييرات.
لفهم ما يفعله Git داخل المستودع نحتاج إلى أربعة مكونات أساسية:
Working Directory
Index
Object Database
Referencesأين تعدل ملفاتك؟ (Working Directory)
الـ Working Directory هو مساحة العمل التي تضم الملفات و المجلدات التي تراها أثناء العمل على المشروع. على سبيل المثال:
project/
├── app.js
├── package.json
└── README.mdعندما تعدل ملفات المشروع أو تنشئ ملفات جديدة فأنت تعمل داخل الـ Working Directory. هناك تكتب الكود و تحرر الملفات. أما تاريخ المشروع فلا يخزنه Git في مساحة العمل هذه.

ما الذي تجهزه للـ Commit القادم؟ (Index)
الـ Index أو Staging Area يحفظ الحالة التي تجهزها للـ Commit القادم.
Working Directory
↓
Indexتعديل الملف وحده لا يغير الحالة المجهزة. عندما تختار إدخال نسخته الحالية في الـ Commit القادم تغير الحالة في الـ Index. و عند تجهيز الملف يخزن Git محتواه في الـ Object Database أيضا؛ لا ينتظر إنشاء الـ Commit ليخزن هذا المحتوى.

أين يخزن Git بياناته؟ (Object Database)
عندما يحفظ Git البيانات فإنه لا يخزنها داخل الملفات التي تعمل عليها يوميا. بل يحفظها في قاعدة بيانات خاصة داخل مجلد .git. هناك يحتفظ بالبيانات التي يحتاجها لإدارة المشروع و تتبع تغيراته.
يحول Git الملفات و المجلدات و تاريخ المشروع إلى Objects داخل هذه القاعدة. و سنرى في الدروس القادمة كيف يحدث ذلك.

كيف يتتبع Git بياناته؟ (References)
إذا كانت الـ Object Database تحتوي على البيانات نفسها فإن الـ References تساعد Git على الوصول إليها.
الـ References هي مؤشرات (Pointers) يستخدمها Git للوصول إلى البيانات المخزنة داخل المستودع من دون كتابة معرفاتها الطويلة في كل مرة.
و سنرى لاحقا كيف يستخدم Git هذه المؤشرات لتنظيم بياناته.

الصورة الكاملة
يمكن تلخيص طريقة عمل Git بالشكل التالي:
Working Directory ── stores content ──> Object Database
↑
Index ────────────── points to content ──────┤
References ───────── points to objects ──────┘تعدل الملفات داخل الـ Working Directory و تجهز في الـ Index الحالة التي ستدخل الـ Commit القادم. يخزن Git المحتوى في الـ Object Database و تساعده الـ References على الوصول إلى الكائنات. ليس الـ Index ممرا إلزاميا لكل عملية تخزين؛ سنخزن محتوى ملف مباشرة في الدرس الرابع.
كلما تعمقنا في طريقة عمل Git سنرى هذه المكونات تعمل معا. و في الدرس التالي سنفتح مجلد .git و نرى ما الذي وضعه Git داخله.
