في هذا الدرس 6تصفّح المواضيع
تتعامل أنظمة التحكم القديمة مع البيانات على أنها قائمة من الفروق النصية المتتابعة لكل ملف على حدة (Delta-Based Storage)، أما نظام Git فيبتكر نموذجاً مختلفاً جذرياً: إذ يتعامل مع تاريخ المشروع باعتباره سلسلة متتابعة من اللقطات الكاملة (Snapshots) لنظام ملفات مصغر.
- تصوير حالة المشروع بالكامل: عند حفظ كل إصدار جديد، يلتقط Git صورة شاملة لحالة جميع ملفات المشروع في تلك اللحظة.
- عدم تكرار الملفات الثابتة: إذا لم يتغير ملف ما بين لقطتين، فلا يعيد Git نسخه، بل يضع مؤشراً خفيفاً يشير إلى النسخة المحفوظة مسبقاً لتوفير المساحة.
# Snapshot model inside Git:
# Commit C1: index.html(v1), app.css(v1)
# Commit C2: index.html(v2), app.css(-> v1)
# Unchanged files reuse existing objects
يفحص نظام Git كل ملف ولقطة ببصمة رقمية قبل تخزينه، ثم يستخدم تلك البصمة عنواناً دائماً للكائن؛ لذلك يستحيل أن يتلف بايت واحد أو يتغير محتوى ملف دون أن يكتشف Git ذلك فوراً. ويعتمد النظام على دالة التعمية SHA-1 التي تنتج سلسلة مكونة من 40 محرفاً ست عشرياً (0-9 وa-f):
- قاعدة بيانات معنونة بالمحتوى: لا يرقّم Git اللقطات بأرقام تسلسلية عادية، بل يجعل بصمة المحتوى نفسها مفتاح الوصول للكائن.
- البصمة المختصرة: يكتفي المطورون في القراءة اليومية بأول 7 أو 8 محارف من البصمة مثل
9f8a2b1لسهولة التعامل.
# SHA-1 produces a 40-hex-character digest
sha1sum index.html
# 24b9da6552252987aa493b52f8696cd6d3b00373 index.html
لفهم أوامر Git القادمة دون أي التباس، يجب أن تتصور المناطق الثلاث (Three Trees) التي تمر بها ملفاتك داخل حاسوبك المحلي:
- 1. مجلد العمل (Working Tree): هو مجلد المشروع الظاهر أمامك على القرص والذي تفتح ملفاته وتعدلها بمحرر الأكواد.
- 2. منطقة التجهيز (Staging Area / Index): هي منطقة وسطى (تُحفظ داخل الملف
.git/index) تجمع فيها التعديلات التي اخترتها لتكون ضمن اللقطة القادمة.
تمثل المنطقة الثالثة القلب النابض للنظام وهي مستودع Git المحلي (Git Directory / Repository) المتمثل في المجلد المخفي .git داخل جذر مشروعك:
- خزنة السجل الدائم: تُحفظ داخل مجلد
.gitجميع اللقطات المضغوطة وبيانات المؤلفين والفروع وسجل الالتزامات الكامل. - استقلالية السجل عن ملفات العرض: طالما بقي مجلد
.gitسليماً على قرصك، يمكنك استرجاع أي ملف حُذف بالخطأ من مجلد العمل في أي لحظة.
# Flow across the Three Trees:
# [Working Tree] ---> [Staging Index] ---> [.git Repo]
# (Edit files) (Stage changes) (Save snapshot)
بالتوازي مع المناطق الثلاث، يمر كل ملف متتبع داخل مشروعك بإحدى حالات ثلاث أساسية (Three File States):
- 1. معدَّل (Modified): غيّرت محتوى الملف في مجلد العمل وحفظته على القرص، لكنك لم تضفه بعد إلى منطقة التجهيز.
- 2. مجهَّز (Staged): اعتمدت النسخة الحالية من الملف المعدل وأدرجتها في منطقة التجهيز لتدخل في اللقطة القادمة.
- 3. ملتزَم به (Committed): حُفظت نسخة الملف بأمان داخل قاعدة بيانات المستودع المحلي
.git.
# File State 1: Modified (in Working Tree)
# File State 2: Staged (in .git/index)
# File State 3: Committed (in .git/objects)
يعتمد Git داخلياً على ثلاثة كائنات أساسية لحفظ اللقطات هي: كائن المحتوى blob (يحفظ بيانات الملف)، وكائن الشجرة tree (يحفظ أسماء الملفات والمجلدات)، وكائن الالتزام commit (يحفظ بيانات المؤلف ويشير لشجرة اللقطة)، بينما يشير المؤشر الخاص HEAD إلى الفرع النشط حالياً. يوضح الجدول التالي العلاقة المتكاملة بينها:
| المكوّن المعماري | الموقع على القرص | الوظيفة الهندسية الأساسية | حالة الملف المقابلة |
|---|---|---|---|
| مجلد العمل Working Tree | ملفات ومجلدات المشروع الظاهرة | مساحة التحرير المباشرة لملفات الكود | معدَّل Modified أو غير متتبع |
| منطقة التجهيز Staging Area | ملف الفهرس .git/index | تجهيز وفرز التعديلات للقطة القادمة | مجهَّز Staged |
| المستودع المحلي Repository | مجلد .git/objects و.git/refs | حفظ اللقطات الدائمة وبصمات SHA-1 | ملتزَم به Committed |
| مؤشر الرأس HEAD | ملف المرجع .git/HEAD | الإشارة إلى الفرع والإصدار النشط حالياً | اللقطة المفتوحة حالياً |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس كيف يخزن Git اللقطات الكاملة بدلاً من الفروق الجزئية، وكيف يحمي السلامة التشفيرية ببصمة SHA-1، ودور المناطق الثلاث وحالات الملف الثلاث وكائنات المستودع ومؤشر HEAD. الخطوة التالية: انتقل الآن إلى الدرس رقم 3 «الفرق بين نظام Git ومنصة GitHub» للتمييز بين المحرك المحلي ومنصات الاستضافة السحابية.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Snapshot اللقطة الكاملة
- تمثيل كامل لحالة جميع الملفات المتتبعة في المشروع عند لحظة زمنية محددة.
- للمراجعة
- 02 Working Tree مجلد العمل
- مجلد المشروع الظاهر على القرص حيث تفتح ملفات الكود وتعدلها بالمحرر.
- للمراجعة
- 03 Staging Area منطقة التجهيز
- المنطقة الوسطى التي تُجمَع فيها التعديلات المختارة تمهيداً لحفظها في اللقطة القادمة.
- للمراجعة
- 04 HEAD Pointer مؤشر الرأس HEAD
- مرجع رمزي يشير إلى آخر لقطة في الفرع النشط المفتوح حالياً داخل المستودع المحلي.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 SHA-1 SHA-1
- Secure Hash Algorithm 1
- دالة تعمية تنتج بصمة فريدة مكونة من 40 محرفاً ست عشرياً لكل كائن داخل Git.
- للمراجعة
- 02 HEAD HEAD
- Current Branch Tip Pointer
- المؤشر المرجعي الذي يحدد الفرع واللقطة الحالية التي يستند إليها مجلد العمل.
- للمراجعة
- 03 BLOB BLOB
- Binary Large Object
- كائن داخلي في Git يخزن محتوى الملف المضغوط بمعزل عن اسمه أو مساره.
- للمراجعة
- 04 DAG DAG
- Directed Acyclic Graph
- البنية الشجرية الموجهة التي تشكلها لقطات Git عبر إشارة كل التزام إلى الالتزام الأب السابق له.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
استخدم المختبر التفاعلي للتنقل بين مجلد العمل ومنطقة التجهيز والمستودع المحلي ومراقبة تغير حالة الملف.
-
نفذ أمر حساب بصمة SHA-1 على ملف تجريبي لملاحظة صيغة البصمة المكونة من 40 محرفاً ست عشرياً.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
كيف يخزن نظام Git تاريخ المشروع مقارنة بالأنظمة القديمة المعتمدة على الفروق مثل SVN؟
يخزن Git التاريخ على هيئة سلسلة من اللقطات الكاملة للمشروع مع الإشارة للملفات التي لم تتغير دون إعادة نسخها.
إذا لم يتغير ملف متتبع بين لقطتين، فإن Git يعيد نسخ محتواه الكامل مرة أخرى على القرص.
خطأ؛ بل يكتفي Git بوضع مؤشر يشير إلى كائن الملف المحفوظ مسبقاً دون تكرار مساحته.
كم محرفاً ست عشرياً تتكون منه بصمة SHA-1 الكاملة في نظام Git؟
تتكون بصمة SHA-1 في Git من 40 محرفاً ست عشرياً تمثل 160 بت.
أي منطقة من المناطق الثلاث تعمل كمنطقة فرز وسطى لتجهيز التعديلات للقطة القادمة؟
تمثل منطقة التجهيز (Staging Area / Index) المرحلة الوسطى التي تُفرز فيها التعديلات قبل حفظ اللقطة.
ما الحالات الثلاث الأساسية التي يمر بها الملف المتتبع داخل نظام Git؟
يمر الملف المتتبع بثلاث حالات هي: معدَّل Modified، أو مجهَّز Staged، أو ملتزَم به Committed.
يحتوي المجلد المخفي .git على قاعدة بيانات الكائنات والسجل التاريخي الدائم للمستودع المحلي.
صواب؛ فالمجلد المخفي .git يضم كافة اللقطات والفروع والكائنات الخاصة بالمستودع المحلي.
أي كائن داخلي في Git يختص بتخزين محتوى الملف الخام المضغوط بدون اسم الملف؟
يخزن كائن blob محتوى الملف الخام، بينما يخزن كائن tree أسماء الملفات وهيكل المجلدات.
ما وظيفة المؤشر HEAD داخل مستودع Git؟
يشير المؤشر HEAD إلى الفرع النشط واللقطة الحالية المفتوحة داخل مجلد العمل.