MASTRILOالدورة/ما المشكلة التي يحلها Git؟
MASTRILO

ما المشكلة التي يحلها Git؟

إذا سألت معظم المطورين عن Git فغالبا ستسمع إجابات مثل:

  • أداة لإدارة الإصدارات.
  • أداة للتعاون بين أعضاء الفريق.
  • أداة نستخدمها مع GitHub.

كل هذه الإجابات صحيحة لكنها تصف ما يفعله Git أكثر مما تشرح كيف يعمل. قبل أن ندرس مكونات Git الداخلية نحتاج أولا إلى فهم المشكلة التي جاء لحلها.

مشكلة تتبع التغييرات

تخيل أنك تعمل على مشروع يحتوي على ملف واحد:

txt
app.js

في البداية يحتوي الملف على:

js
function calculateTotal(price, quantity) {
  return price * quantity;
}

بعد فترة أضفت إلى الكود دعم الخصومات (Discounts):

js
function calculateTotal(price, quantity, discount = 0) {
  const total = price * quantity;
  return total - discount;
}

ثم واصلت العمل على المشروع و أضفت تعديلات أخرى. بعد أسبوع اكتشفت أن أحد التغييرات تسبب في مشكلة داخل التطبيق.

الأسئلة التي تواجهك الآن:

  • ما الذي تغير؟
  • متى تغير؟
  • من قام بهذا التغيير؟
  • كيف يمكن العودة إلى النسخة السابقة؟
سلسلة زمنية توضح تطور نسخ الملف عبر الوقت مع علامة استفهام و دلالة على العودة للنسخة السابقة
كيف نعرف ما الذي تغير و متى حدث التغيير ثم نعود إلى نسخة سابقة؟

إذا كنت تحتفظ بنسخة واحدة فقط من الملف فسيكون من الصعب الإجابة عن هذه الأسئلة. لهذا السبب كان المطورون يحتفظون سابقا بعدة نسخ من المشروع:

text
project/
project-final/
project-final-v2/
project-final-v2-fixed/
project-final-v2-fixed-final/

مع مرور الوقت تتحول هذه الطريقة إلى فوضى يصعب إدارتها. المشكلة ليست في تخزين الملفات، بل في تتبع التغييرات التي تحدث عليها مع مرور الوقت.

عدة مجلدات مشروع بأسماء متشابهة مربكة (project، project-final، إلخ) حول شخص مرتبك
مع كثرة النسخ تصبح أسماء المجلدات مربكة و يسهل فقدان التغييرات بينها

ما هو Version Control؟

يساعدنا نظام Version Control على إدارة التغييرات التي تطرأ على المشروع و الاحتفاظ بتاريخ يمكن الرجوع إليه لاحقا. بدلا من إنشاء نسخة جديدة من المشروع بعد كل تعديل يحتفظ النظام بسجل للتغييرات التي مر بها المشروع.

يتطور المشروع عبر سلسلة من النسخ المتتالية:

text
Version 1
    ↓
Version 2
    ↓
Version 3
    ↓
Version 4

تمثل كل نسخة حالة المشروع في لحظة محددة. و هكذا نعرف ما الذي تغير و متى حدث التغيير. و يمكننا العودة إلى أي نقطة سابقة عند الحاجة.

أربع نسخ ملف مرتبة على خط زمني مع علامات الإصدار (v1، v2، v3، v4) و شخص يربط بينها
يرتب نظام Version Control نسخ المشروع زمنيا حتى نتمكن من تتبع التغييرات و الرجوع إلى نسخة سابقة

هل Git مجرد نظام Version Control؟

من ناحية الاستخدام نعم لكن هذه ليست الصورة الكاملة. عندما نستخدم Git غالبا نتعامل مع أوامر مثل:

bash
git add
git commit
git branch
git merge

لكن هذه الأوامر ليست سوى واجهة للتعامل مع نظام أعمق. يخزن Git البيانات أولا ثم يبني منها تاريخ المشروع. لهذا يمكن النظر إلى Git على أنه يتكون من جزأين رئيسيين:

text
Git
│
├── Data Storage System
│
└── History Management System

الجزء الأول يخزن البيانات و يمثلها داخليا، بينما يدير الجزء الثاني تاريخ المشروع و العلاقات بين التغييرات المختلفة.

شخص يستخدم أوامر Git (add، commit، branch، merge) متصلة بصندوق Git يحتوي على نظام تخزين البيانات و نظام إدارة التاريخ
نتعامل مع Git من خلال الأوامر، بينما يعمل في الداخل على تخزين البيانات و إدارة تاريخ المشروع

الفكرة الأساسية التي سترافقنا طوال الدورة

خلال هذه الدورة سنفهم كيف يعمل Git من الداخل. و بدلا من حفظ الأوامر سنتعرف إلى المكونات التي يعتمد عليها Git لتخزين البيانات و إدارة تاريخ المشروع.

في الدرس التالي سنرى كيف ينظر Git إلى المستودع قبل أن نبدأ باستكشاف مكوناته من الداخل.

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

Foundations

1.ما المشكلة التي يحلها Git؟

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