في هذا الدرس 6تصفّح المواضيع
يُعرَّف نظام التحكم في الإصدارات (Version Control System — VCS) بأنه أداة هندسية تسجل التغييرات التي تطرأ على ملفات الكود المصدري عبر الزمن، مما يتيح لك استرجاع أي إصدار سابق بدقة، ومعرفة المطور الذي عدّل كل سطر، وفهم سبب التعديل، والتراجع الفوري عند ظهور أي خلل برمجي.
- التوثيق الزمني الدقيق: تسجيل هوية المؤلف والتوقيت والسبب الهندسي لكل نسخة محفوظة في المشروع.
- التجريب الآمن للميزات: اختبار الأفكار والتعديلات الجديدة دون تهديد استقرار النسخة العاملة.
- الاسترجاع الفوري: العودة إلى آخر إصدار سليم بضغطة واحدة عند اكتشاف خطأ غير متوقع.
# Clean project workspace tracked by VCS
ls -la closetag-portal/
# index.html
# styles.css
# app.js
يلجأ كثير من المبتدئين قبل تعلم أدوات التحكم في الإصدارات إلى نسخ مجلد المشروع يدوياً بأسماء مثل project-final وproject-final-2. غير أن هذا الأسلوب اليدوي ينهار سريعاً في المشاريع الحقيقية للأسباب التالية:
- غياب المقارنة الدقيقة: يستحيل معرفة الأسطر الثلاثة التي تغيرت داخل ملف كبير بمجرد النظر إلى مجلدين منسوخين.
- مسح تعديلات الزملاء بالخطأ: عند تعديل ملف مشترك من مطورين مختلفين ونسخه يدوياً، تطغى إحدى النسختين على الأخرى وتضيع التعديلات.
- انعدام سياق القرار البرمجي: لا تخبرك أسماء المجلدات أبداً لماذا حُذف سطر معين قبل ثلاثة أشهر.
# Anti-pattern: manual duplicated folders
ls -1 ~/Desktop/legacy-copies/
# site-backup-monday/
# site-final-v2/
# site-final-fixed-really/
حاول الجيل الأول من الأدوات حل مشكلة النسخ اليدوي عبر الأنظمة المحلية التي تحفظ الفروق على جهاز واحد فقط، ثم ظهرت أنظمة التحكم المركزية (Centralized VCS — CVCS) مثل Subversion (SVN) وPerforce؛ حيث يحتفظ خادم مركزي وحيد بالسجل التاريخي الكامل، ويسحب المطورون ملفات العمل منه عبر الشبكة. غير أن هذا النموذج يعاني من نقطة ضعف خطيرة هي نقطة الفشل الوحيدة؛ فإذا انقطع الاتصال بالخادم توقف حفظ الإصدارات ومراجعة السجل تماماً، وإذا تلف قرص الخادم المركزي دون نسخة احتياطية ضاع تاريخ المشروع بأكمله.
جاءت أنظمة التحكم في الإصدارات الموزعة (Distributed VCS — DVCS) وعلى رأسها Git لتنهي قيود الأنظمة المركزية جذرياً؛ فبدلاً من سحب النسخة الأخيرة فقط من الملفات، يمتلك كل مطور على جهازه نسخة كاملة ومتطابقة من المستودع تضم تاريخ التعديلات والفروع كافة:
- عمل محلي كامل بدون إنترنت: يمكنك تسجيل الإصدارات ومقارنة الملفات ومراجعة السجل التاريخي على حاسوبك مباشرة دون أي اتصال بالشبكة.
- أمان وموثوقية مضاعفة: إذا تعطل الخادم المشترك، فإن نسخة أي مطور في الفريق كافية لاستعادة المستودع بكامل تاريخه فوراً.
# Every developer workstation holds full history
# 1. Edit files locally (index.html)
# 2. Record snapshots to local disk instantly
# 3. Sync with teammates when back online
ابتكر المهندس لينوس تورفالدس (Linus Torvalds) مؤسس نواة لينكس نظام Git في أبريل عام 2005 لإدارة تطوير نواة Linux Kernel الضخمة بكفاءة وحرية كاملة، وقد صممه وفق أهداف هندسية صارمة جعلته المعيار العالمي الأول اليوم:
- السرعة الفائقة: كُتب بلغة C ليواكب المشاريع العملاقة التي تضم عشرات الآلاف من الملفات دون أي تباطؤ.
- دعم التطوير غير الخطي: إنشاء ودمج الفروع المتوازية بسرعة وسلاسة فائقة.
- الحماية التشفيرية للبيانات: فحص كل ملف وإصدار ببصمة رقمية تمنع أي تلف أو تلاعب غير مرصود.
# Core Git engineering milestones (2005 -> Present)
# Creator: Linus Torvalds (Linux Kernel)
# License: Open Source (GPLv2)
# Platforms: Linux, macOS, Windows
قبل الانتقال إلى دراسة البنية الداخلية لنظام Git في الدرس القادم، يلخص الجدول المقارن التالي الفروق الجوهرية بين النسخ اليدوي والأنظمة المركزية ونظام Git الموزع:
| معيار المقارنة | نسخ المجلدات يدوياً | النظام المركزي CVCS مثل SVN | النظام الموزع DVCS مثل Git |
|---|---|---|---|
| مكان حفظ السجل التاريخي | لا يوجد سجل (مجلدات مبعثرة) | خادم مركزي واحد فقط | مستودع كامل على جهاز كل مطور |
| العمل وحفظ النسخ بدون إنترنت | نسخ يدوي يفتقر للتوثيق | غير متاح عند انقطاع الشبكة | مدعوم بالكامل محلياً بنسبة 100% |
| سرعة المقارنة والاسترجاع | بطيئة وعرضة للخطأ البشري | مرتبطة بسرعة الاتصال بالخادم | فورية لأنها تقرأ من القرص المحلي |
| الحماية من فقدان التاريخ | مرتفعة المخاطر عند استبدال ملف | نقطة فشل وحيدة في الخادم | كل نسخة مطور تعمل كنسخة احتياطية كاملة |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تعرفت في هذا الدرس على مفهوم أنظمة التحكم في الإصدارات وأسباب فشل نسخ المجلدات يدوياً، والفارق المعماري بين الأنظمة المركزية والأنظمة الموزعة، ونشأة نظام Git وأهداف تصميمه الهندسية. الخطوة التالية: انتقل الآن إلى الدرس رقم 2 «كيف يعمل Git اللقطات والمناطق الثلاث» لاكتشاف آلية اللقطات الكاملة وبصمات SHA-1 والمناطق الثلاث.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Version Control System نظام التحكم في الإصدارات
- نظام برمجي يسجل التعديلات التي تطرأ على الملفات عبر الزمن لإتاحة مقارنتها واسترجاع أي إصدار سابق بدقة.
- للمراجعة
- 02 Centralized VCS نظام التحكم المركزي
- معمارية تحفظ السجل التاريخي الكامل على خادم مركزي واحد بينما يسحب المطورون نسخة العمل فقط.
- للمراجعة
- 03 Distributed VCS نظام التحكم الموزع
- معمارية مثل Git يمتلك فيها كل مطور نسخة محلية كاملة تضم جميع الإصدارات والفروع على جهازه.
- للمراجعة
- 04 Repository المستودع البرمجي
- قاعدة البيانات التي تحفظ جميع لقطات المشروع وبيانات المؤلفين والفروع والسجل التاريخي الكامل.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 VCS VCS
- Version Control System
- نظام إدارة وتتبع إصدارات الملفات البرمجية عبر الزمن.
- للمراجعة
- 02 CVCS CVCS
- Centralized Version Control System
- نظام تحكم مركزي يعتمد على خادم وحيد لحفظ سجل الإصدارات.
- للمراجعة
- 03 DVCS DVCS
- Distributed Version Control System
- نظام تحكم موزع يمتلك فيه كل جهاز نسخة كاملة من المستودع.
- للمراجعة
- 04 SCM SCM
- Source Code Management
- إدارة الكود المصدري وتنسيق تعديلات فرق البرمجة.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
بدّل بين التبويبات الثلاثة في المختبر التفاعلي لمقارنة النسخ اليدوي والنظام المركزي ونظام Git الموزع.
-
افحص مجلدات مشاريعك المحلية وحدد المجلدات المكررة يدوياً التي ينبغي إدارتها عبر مستودع Git منظم.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الوظيفة الأساسية لنظام التحكم في الإصدارات مثل Git؟
يتولى نظام التحكم في الإصدارات تسجيل تاريخ التعديلات وهوية المؤلف واسترجاع الإصدارات السابقة ومقارنتها.
في أنظمة التحكم الموزعة مثل Git، يمتلك جهاز كل مطور نسخة محلية كاملة من السجل التاريخي للمستودع.
صواب؛ فكل مطور في Git يمتلك مستودعاً محلياً كاملاً يضم جميع اللقطات والفروع التاريخية.
لماذا تفشل طريقة نسخ المجلدات يدوياً (مثل project-final-v2) في المشاريع البرمجية الجماعية؟
تفتقر المجلدات المنسوخة يدوياً إلى سجل يوضح تغييرات الأسطر وتؤدي بسهولة إلى مسح تعديلات الزملاء بالخطأ.
ما نقطة الضعف المعمارية الأبرز في أنظمة التحكم المركزية CVCS مثل Subversion؟
يمثل الخادم المركزي نقطة فشل وحيدة؛ فإذا انقطع الاتصال به توقف المطورون عن حفظ الإصدارات أو فحص السجل.
يشترط نظام Git اتصالاً دائماً بالإنترنت لاستعراض سجل المشروع أو حفظ اللقطات المحلية.
خطأ؛ لأن Git نظام موزع يجري عمليات حفظ اللقطات ومراجعة التاريخ محلياً على القرص دون حاجة للإنترنت.
مَن ابتكر نظام Git عام 2005 وما المشروع الذي صُمم لإدارته في الأصل؟
ابتكر لينوس تورفالدس نظام Git في أبريل 2005 لإدارة تطوير نواة نظام التشغيل Linux Kernel.
لماذا تتسم العمليات اليومية في Git بسرعة فائقة مقارنة بالأنظمة المركزية؟
لأن Git يقرأ البيانات ويكتبها مباشرة في المستودع المحلي على قرص جهازك دون انتظار استجابة الشبكة.
يُعد نظام Git لوحة لإدارة تذاكر المشكلات الإدارية وليس نظاماً للتحكم في إصدارات الكود.
خطأ؛ فنظام Git هو نظام تحكم في الإصدارات الموزعة يتتبع لقطات الملفات وسجل الكود المصدري.