Git و GitHub

مقدمة إلى التحكم في الإصدارات

13 دقيقة الدرس 1 من 35

مقدمة إلى التحكم في الإصدارات

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

ما هو التحكم في الإصدارات؟

التحكم في الإصدارات (المعروف أيضاً بالتحكم في المصدر أو التحكم في المراجعات) هو نظام يسجل التغييرات على الملفات عبر الزمن بحيث يمكنك استدعاء إصدارات محددة لاحقاً. يسمح لك بـ:

  • تتبع كل تغيير تم إجراؤه على ملفاتك
  • معرفة من أجرى كل تغيير ومتى
  • إرجاع الملفات إلى حالة سابقة
  • مقارنة التغييرات عبر الزمن
  • التعاون مع مطورين آخرين دون تعارضات
  • التعافي من الأخطاء بسهولة
حقيقة مهمة: التحكم في الإصدارات ليس فقط للكود! يمكنك استخدامه لأي نوع من الملفات - الوثائق، ملفات التكوين، مواد التصميم، والمزيد.

لماذا يهم التحكم في الإصدارات

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

❌ بدون التحكم في الإصدارات: - project_final.zip - project_final_v2.zip - project_final_v2_ACTUAL.zip - project_final_v2_ACTUAL_fixed.zip - project_final_v2_ACTUAL_fixed_John_edits.zip ❌ المشاكل: - أي ملف هو الإصدار الأحدث؟ - ما التغييرات التي تم إجراؤها في كل إصدار؟ - كيف تدمج تعديلات جون مع تعديلاتك؟ - كيف تتعافى إذا حدث خطأ؟
✓ مع التحكم في الإصدارات: - مجلد مشروع واحد - تاريخ كامل لجميع التغييرات - سجل واضح لمن غير ما ولماذا - تعاون سهل وحل التعارضات - إرجاع فوري لأي حالة سابقة
مثال من الواقع: في عام 2021، حذف مطور قاعدة بياناته الإنتاجية عن طريق الخطأ. بفضل التحكم في الإصدارات باستخدام Git، استعاد بنية قاعدة البيانات والكود بالكامل في دقائق، مما وفر آلاف الدولارات وساعات لا تحصى.

تاريخ أنظمة التحكم في الإصدارات

تطور التحكم في الإصدارات بشكل كبير عبر العقود:

الجيل الأول - محلي (1970s-1980s): • RCS (نظام التحكم في المراجعات) • SCCS (نظام التحكم في الكود المصدري) • مستخدم واحد، قفل الملفات المحلية • لا تعاون عبر الشبكة الجيل الثاني - مركزي (1990s-2000s): • CVS (نظام الإصدارات المتزامنة) • SVN (Subversion) • Perforce • الخادم المركزي يخزن كل التاريخ • مستخدمون متعددون، لكن تابعون للخادم الجيل الثالث - موزع (2005-الآن): • Git • Mercurial • Bazaar • كل مستخدم لديه تاريخ المستودع الكامل • العمل دون اتصال، عمليات أسرع

التحكم في الإصدارات المركزي مقابل الموزع

التحكم في الإصدارات المركزي (CVS، SVN)

البنية: [الخادم المركزي] ←→ [مطور 1] ←→ [مطور 2] ←→ [مطور 3] الخصائص: ✓ أبسط للفهم ✓ تحكم أسهل في الوصول ✗ نقطة فشل واحدة ✗ يتطلب اتصال بالشبكة ✗ عمليات أبطأ ✗ قدرات تفريع محدودة

التحكم في الإصدارات الموزع (Git، Mercurial)

البنية: [الخادم البعيد] ↕ [مطور 1] ←→ [مطور 2] ←→ [مطور 3] (مستودع كامل) (مستودع كامل) (مستودع كامل) الخصائص: ✓ لا توجد نقطة فشل واحدة ✓ العمل دون اتصال بالكامل ✓ عمليات سريعة (محلية) ✓ تفريع/دمج قوي ✓ نسخة احتياطية كاملة في كل نسخة ✗ منحنى تعلم أعلى
مهم: Git موزع، مما يعني أن كل مطور لديه نسخة كاملة من تاريخ المشروع بالكامل. هذا يجعل العمليات سريعة ويوفر نسخ احتياطية طبيعية.

فوائد التحكم في الإصدارات للمطورين

1. التعاون بدون فوضى يمكن لعدة مطورين العمل على نفس المشروع في وقت واحد دون الكتابة فوق عمل بعضهم البعض. 2. تاريخ كامل ومساءلة يتم تتبع كل تغيير مع من أجراه ومتى ولماذا (رسائل الالتزام). 3. التجربة بدون خوف أنشئ فروعاً لتجربة ميزات جديدة دون التأثير على الكود الرئيسي. 4. إرجاع واستعادة سهلة ارتكبت خطأ؟ ارجع إلى أي إصدار سابق في ثوانٍ. 5. مراجعة الكود والجودة راجع التغييرات قبل دمجها في المشروع الرئيسي. 6. النسخ الاحتياطي واستعادة الكوارث كل نسخة هي نسخة احتياطية كاملة من تاريخ المشروع بالكامل. 7. إدارة الإصدارات وسم إصدارات محددة للإصدارات والحفاظ على إصدارات متعددة. 8. التوثيق والسياق رسائل الالتزام توفر سياقاً لسبب إجراء التغييرات.

سيناريوهات من الواقع

السيناريو 1: خطأ في الإنتاج

المشكلة: ظهور خطأ حرج في الإنتاج بعد النشر. مع التحكم في الإصدارات: 1. تحديد متى تم إدخال الخطأ 2. مراجعة التغييرات المحددة التي تسببت فيه 3. الرجوع إلى آخر إصدار يعمل فوراً 4. إصلاح الخطأ في فرع منفصل 5. نشر الإصلاح بثقة بدون التحكم في الإصدارات: ❌ ذعر، تصحيح يدوي، إصلاحات غير مؤكدة، توقف

السيناريو 2: تطوير ميزة جديدة

المشكلة: تريد إضافة ميزة جديدة مع الحفاظ على كود مستقر. مع التحكم في الإصدارات: 1. إنشاء فرع للميزة 2. تطوير واختبار الميزة بشكل مستقل 3. الحصول على مراجعة الكود من الفريق 4. الدمج عند الاستعداد، أو التخلص منها إذا لم تكن ضرورية 5. يبقى الكود الرئيسي مستقراً طوال الوقت بدون التحكم في الإصدارات: ❌ خطر كسر الوظائف الموجودة، تعاون صعب

السيناريو 3: تعاون الفريق

المشكلة: 5 مطورين يعملون على ميزات مختلفة في وقت واحد. مع التحكم في الإصدارات: 1. كل مطور يعمل على فرعه الخاص 2. يتم تتبع التغييرات وعزلها 3. يتم تحديد التعارضات وحلها بشكل منهجي 4. يحدث التكامل بطريقة مسيطر عليها 5. تاريخ واضح لمن فعل ماذا بدون التحكم في الإصدارات: ❌ تعارضات الملفات، فقدان العمل، ارتباك، إحباط

مقدمة إلى Git

Git هو أكثر نظام تحكم في الإصدارات شعبية في العالم، أنشأه لينوس تورفالدس في عام 2005 (نفس الشخص الذي أنشأ لينكس).

فلسفة Git: • السرعة - تقريباً جميع العمليات محلية وسريعة • تصميم بسيط - ثلاث حالات رئيسية: معدل، مرحلي، ملتزم • دعم قوي للتفريع - التفريع والدمج عمليات أساسية • موزع بالكامل - كل نسخة هي مستودع كامل • سلامة البيانات - كل شيء يتم فحصه (تجزئة SHA-1) • مجاني ومفتوح المصدر - بدون تكاليف ترخيص، مجتمع ضخم
حقيقة ممتعة: تم إنشاء Git في أسابيع قليلة فقط بعد أن فقد مشروع نواة لينكس الوصول إلى نظام التحكم في الإصدارات السابق. بنى لينوس تورفالدس Git ليكون أسرع وأكثر موثوقية من أي شيء آخر متاح.

هيمنة Git على السوق

وفقاً لمسح Stack Overflow للمطورين 2023: استخدام Git: 94% من المطورين استخدام SVN: 5% من المطورين أنظمة أخرى: 1% من المطورين منصات Git الشائعة: • GitHub: 100+ مليون مطور • GitLab: 30+ مليون مستخدم • Bitbucket: 10+ مليون مستخدم

ما ستتعلمه في هذا الدرس التعليمي

خلال هذه السلسلة التعليمية لـ Git و GitHub، ستتقن:

  • أوامر وسير عمل Git الأساسية
  • استراتيجيات التفريع والدمج
  • التعاون مع المستودعات البعيدة
  • ميزات منصة GitHub (PRs، Issues، Actions)
  • سير عمل الفرق المحترفة
  • تقنيات Git المتقدمة
  • أفضل الممارسات واستكشاف الأخطاء

تمرين تأملي:

فكر في:

  1. ما الفرق الرئيسي بين أنظمة التحكم في الإصدارات المركزية والموزعة؟
  2. اذكر ثلاث فوائد لاستخدام التحكم في الإصدارات لتطوير البرمجيات.
  3. لماذا يعتبر Git نظام تحكم في الإصدارات موزعاً؟

الإجابات:

  1. الأنظمة المركزية لديها خادم مركزي واحد بكل التاريخ؛ الأنظمة الموزعة تعطي كل مستخدم نسخة كاملة من تاريخ المستودع بالكامل.
  2. التعاون بدون تعارضات، تاريخ تغيير كامل، إرجاع سهل للإصدارات السابقة، تجربة آمنة بالفروع، نسخ احتياطية طبيعية.
  3. لأن كل مطور يستنسخ مستودع Git يحصل على تاريخ المشروع الكامل، وليس فقط الإصدار الأحدث. الجميع لديه مستودع كامل الميزات.

الملخص

في هذا الدرس، تعلمت:

  • التحكم في الإصدارات يتتبع التغييرات على الملفات عبر الزمن
  • يمكّن من التعاون والاستعادة والمساءلة
  • تطور التحكم في الإصدارات من محلي إلى مركزي إلى موزع
  • الأنظمة الموزعة (مثل Git) تقدم مزايا كبيرة على الأنظمة المركزية
  • Git هو نظام التحكم في الإصدارات المهيمن بحصة سوقية 94%
  • Git يوفر السرعة والتفريع وسلامة البيانات والقدرات دون اتصال
التالي: في الدرس التالي، سنقوم بتثبيت Git على جهازك وتكوينه للاستخدام لأول مرة!

ES
Edrees Salih
منذ 7 ساعات

We are still cooking the magic in the way!