MASTRILOالدورة/كيف يمثل Git حالة المشروع؟
MASTRILO

كيف يمثل Git حالة المشروع؟

يستطيع الـ Tree وصف أسماء الملفات و المجلدات و ربطها بمحتواها. لكن المشروع يتغير مع الوقت. كيف يسجل Git حالة معينة من هذه البنية مع معلومات توضح من سجلها و لماذا؟

ينشئ Git Object يشير إلى الـ Tree الذي يمثل مجلد المشروع و يضيف إليه معلومات عن تلك اللحظة. هذا الـ Object هو Commit.

كيف يصل الـ Commit إلى حالة المشروع؟

لا يحتوي الـ Commit على الملفات مباشرة. بل يحمل معرف الـ Tree الذي يمثل مجلد المشروع. يصل Git من هذا الـ Tree إلى المجلدات و الملفات و محتواها.

يمكن تصور العلاقة بالشكل التالي:

text
Commit
   │
   ▼
  Tree
   │
   ├── hello.txt
   │      │
   │      ▼
   │    Blob
   │
   └── app.js
          │
          ▼
        Blob

يصف الـ Tree حالة ملفات المشروع في تلك اللحظة. أما الـ Commit فيجعل هذه الحالة نقطة يمكن لـ Git الرجوع إليها داخل التاريخ.

Commit يشير إلى Tree يحتوي على hello.txt و app.js و يربط كل ملف بـ Blob مستقل
يشير الـ Commit إلى Tree المشروع ليصل Git منه إلى الملفات و محتواها

ماذا يحتوي الـ Commit؟

إلى جانب معرف الـ Tree يحتوي الـ Commit على معلومات نحتاج إليها لفهم هذه النقطة من التاريخ:

  • بيانات المؤلف و وقت التأليف.
  • بيانات من أنشأ الـ Commit و وقت إنشائه.
  • رسالة الـ Commit.

قد يكون المؤلف و من أنشأ الـ Commit الشخص نفسه لكن Git يحتفظ بالدورين كل على حدة. أما الرسالة فتساعد من يقرأ التاريخ على فهم سبب تسجيل هذه الحالة.

ما الذي يضيفه الـ Commit؟

يصف الـ Tree حالة الملفات وحدها. أما الـ Commit فيربط هذه الحالة بمعلوماتها. هذه أهم الحقول التي نحتاج إليها الآن:

text
Commit
├── Tree ID → Project Snapshot
├── Author
├── Committer
├── Timestamps
└── Message
سجل Commit يحتوي على مرجع Tree و حقول Author و Date و Message
يربط الـ Commit معرف الـ Tree ببيانات المؤلف و وقت الإنشاء و الرسالة

لنجرب بأنفسنا

أنشئ Commit جديدا للمشروع:

bash
git add .
git commit -m "snapshot"

اعرض سجل الـ Commits:

bash
git log

انسخ المعرف الذي يظهر بعد كلمة commit و استخدمه مكان <commit-hash> في الأمر التالي:

bash
git cat-file -p <commit-hash>

ابحث في المخرج عن سطري tree و author. ستجد رسالة snapshot بعد السطر الفارغ.

الصورة الحالية

أصبح لدينا الآن ثلاثة أنواع من الـ Objects:

text
Blob
└── File Content
 
Tree
└── File Structure
 
Commit
├── Tree ID
├── Author
├── Committer
├── Timestamps
└── Message

يحمل الـ Blob المحتوى و يصف الـ Tree حالة الملفات. أما الـ Commit فيشير إلى هذه الحالة و يسجل معلوماتها. إذا أنشأنا أكثر من Commit فكيف يعرف Git ترتيبها؟ في الدرس التالي سنرى الرابط الذي يصل كل Commit بما سبقه.

اختبر معلوماتك

سجّل دخولك للإجابة على الأسئلة وحفظ تقدّمك.

سجّل الدخول
اللوحات
نوع الخط
حجم الخط
أكملت 0 من 41 درس

Git Objects

4.كيف يمثل Git حالة المشروع؟

Git on Your Machine741 كيف يمثل Git حالة المشروع؟مكافأة إكمال الدرس إضافة إلى نقاط أنشطته. 10 XP. تُمنح المكافأة مرة واحدة فقط.