Git: مقدمة إلى Git ومفاهيم التحكم في الإصدارات

يُعد «Git» نظام التحكم في الإصدارات الموزع الأكثر شيوعًا في العالم — فهو يجعل التعاون بين أعضاء الفريق أمرًا بسيطًا وفعالًا.

صُمم هذا البرنامج التعليمي للمبتدئين الذين ليس لديهم خبرة سابقة. يبدأ البرنامج بأساسيات التحكم في الإصدارات ويتطور تدريجيًا حتى تصبح بارعًا في استخدام Git للتعاون الجماعي.

1. ما ستتعلمه



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

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

(1) لماذا يعد التحكم في الإصدارات ضروريًا؟

تخيل أنك تكتب بحثًا:

TEXT 📖 للعرض فقط
Thesis-v1.doc          # First Edition
Thesis-v2.doc          # Some content has been revised.
Thesis-Final Version.doc       # My advisor said I still need to revise it.
Thesis-Final Version2.doc      # Made a few more changes
Thesis-I'll never change the layout.doc    # This really is the final version.
Thesis-I'll never change the layout2.doc   # All right,Still needs to be revised...

المشكلة في هذا النهج هي:

وقد تم إنشاء أنظمة التحكم في الإصدارات خصيصًا لمعالجة هذه المشكلات.



3. تطور أنظمة التحكم في الإصدارات

(1) 3.1 التحكم المحلي في الإصدارات

كان الشكل الأقدم لنظام التحكم في الإصدارات يتمثل في تخزين جميع إصدارات الملف محليًّا.

100%
graph TB
    A[Local Database<br/>v1, v2, v3] --> B[Workspace]

أدوات تمثيلية: RCS (نظام التحكم في المراجعات)

العيوب: لا يدعم التعاون بين عدة مستخدمين


(2) 3.2 التحكم المركزي في الإصدارات

يتم تخزين جميع إصدارات مجموعة البيانات على خادم واحد. ويقوم أعضاء الفريق باسترداد الملفات من الخادم، وإجراء التغييرات عليها، ثم إرسالها مرة أخرى إلى الخادم.

100%
graph TB
    S[Central Server<br/>All Versions]
    S --> A[UserA]
    S --> B[UserB]
    S --> C[UserC]

أدوات تمثيلية: CVS، Subversion (SVN)، Perforce

المزايا:

العيوب:


(3) 3.3 التحكم في الإصدارات الموزعة

يمتلك كل مطور مستودعًا كاملاً للتحكم في الإصدارات (repository) يتضمن السجل الكامل.

100%
graph LR
    A[UserAWarehouse<br/>Complete History] <--> B[UserBWarehouse<br/>Complete History]
    B <--> C[UserCWarehouse<br/>Complete History]
    A <--> C

أدوات تمثيلية: Git، Mercurial، Bazaar

المزايا:

العيوب:



4. نشأة Git

(1) 4.1 أصول Git

في عام 2005، وقع حدث هام في مجتمع مطوري نواة لينكس:

أهداف تصميم Git:

  1. السرعة: يجب أن تكون سريعة جدًّا
  2. البساطة: يجب أن يكون التصميم بسيطًا وأنيقًا
  3. دعم التطوير غير الخطي: يتيح إنشاء آلاف الفروع المتوازية
  4. موزعة بالكامل: يمتلك كل مطور مستودعًا كاملاً
  5. Efficient handling of large-scale projects: such as the Linux kernel

أنجز لينوس النسخة الأولية من Git في أبريل 2005 في غضون أسبوعين تقريبًا. واليوم، أصبح Git نظام التحكم في الإصدارات الأكثر شيوعًا في العالم.

(2) 4.2 فلسفة تصميم Git

يجسد تصميم Git عدة مبادئ أساسية:

لمحة عامة، وليس الاختلافات

تقوم أنظمة أخرى (مثل SVN) بتخزين الاختلافات بين الملفات:

TEXT 📖 للعرض فقط
v1: file.txt (Original Document)
v2: file.txt + diff1 (Storage Differences)
v3: file.txt + diff1 + diff2 (Cumulative Difference)

يخزن Git لقطة كاملة لكل عملية التزام:

TEXT 📖 للعرض فقط
v1: file.txtA complete snapshot of
v2: file.txtA complete snapshot of
v3: file.txtA complete snapshot of

المزايا:

تُجرى جميع العمليات تقريبًا محليًّا

لا تتطلب سوى عمليات «الدفع» و«السحب» اتصالاً بالإنترنت.



5. المفاهيم الأساسية لـ Git

(1) 5.1 المستودع

يُعد «المستودع» مفهومًا أساسيًّا في Git، ويشمل ما يلي:

100%
graph TB
    subgraph GitWarehouse
        R[Repository .git<br/>All Commit History<br/>All Branch Information]
        S[Buffer Stage<br/>Changes Ready to Be Submitted]
        W[Workspace Work<br/>Files Actually Edited]
    end
    W -->|git add| S
    S -->|git commit| R

(2) 5.2 الإرسال

يُعد «الالتزام» (commit) الوحدة الأساسية في Git، ويتألف من:

TEXT 📖 للعرض فقط
commit a1b2c3d4e5f6... (40Bit Hash)
Author: Zhang San <zhangsan@example.com>
Date:   2024-01-01 10:00:00

    Add User Login Functionality

(3) 5.3 الفرع

الفرع هو مؤشر قابل للنقل يشير إلى عملية التثبيت. إن إنشاء فرع في Git لا يتطلب جهدًا يذكر — فهو يتطلب ببساطة إنشاء ملف بحجم 41 بايت (تتكون من 40 بايت من التجزئة بالإضافة إلى حرف انتقال سطر واحد بحجم 1 بايت).

100%
graph LR
    C1[SubmitC1] --> C2[SubmitC2] --> C3[SubmitC3]
    main[mainBranch] --> C3
    feature[featureBranch] --> C3


6. حالات استخدام Git

(1) 6.1 المشاريع الشخصية

(2) 6.2 العمل الجماعي

(3) 6.3 مشاريع البرمجيات مفتوحة المصدر

(4) 6.4 التكامل المستمر/النشر المستمر (CI/CD)



7. Git مقابل أنظمة التحكم في الإصدارات الأخرى

الميزات Git SVN CVS
الهندسة موزعة مركزية مركزية
العمل دون اتصال بالإنترنت ✅ مدعوم بالكامل ❌ غير مدعوم ❌ غير مدعوم
إنشاء فرع سريع جدًّا (O(1)) بطيء (نسخ المجلد) غير مدعوم
طريقة التخزين لقطة تفاضلية تفاضلية
الاعتماد على الشبكة الدفع/السحب فقط جميع العمليات جميع العمليات
التعافي من الكوارث مرتفع (نسخ احتياطي كامل لكل شخص) منخفض (يعتمد على الخادم) منخفض

▶ مثال: أوامر Git الأساسية

BASH
# InitializationGitWarehouse
git init

# View Repository Status
git status

# Add a file to the staging area
git add .

# Submit Changes
git commit -m "Initial Submission"

# View commit history
git log


❓ أسئلة شائعة

س ما هي العلاقة بين Git و GitHub؟
ج Git هي أداة للتحكم في الإصدارات، أما GitHub فهي منصة لاستضافة الشفرات البرمجية تعتمد على Git. يمكن تشبيه الأمر بأن Git هي «سيارة» وGitHub هي «موقف سيارات» — يمكنك استخدام Git لإدارة شفراتك البرمجية محليًّا، ثم إرسالها إلى GitHub للاستضافة والتعاون.
س لماذا يجب أن أتعلم Git؟
ج أصبح Git المعيار السائد في هذا المجال. يستخدم 95% من المطورين Git، وتُدار جميع مشاريع البرمجيات مفتوحة المصدر تقريبًا باستخدام Git. إذا لم تتعلم Git، فلن تتمكن من المشاركة في العمل الجماعي أو المساهمة في مشاريع البرمجيات مفتوحة المصدر.
س هل يشغل نظام التحكم في الإصدارات الموزعة مساحة كبيرة؟
ج يستخدم Git تقنيات الضغط وإزالة التكرار، مما يجعله فعالاً للغاية من حيث استخدام مساحة التخزين. على سبيل المثال، تحتوي نواة Linux على أكثر من مليون عملية التزام، لكن حجم مستودع Git لا يتجاوز حوالي 1 جيجابايت.
س هل لا يزال SVN قيد الاستخدام؟
ج ما زلنا نستخدمه، لكن استخدامه آخذ في التراجع عامًا بعد عام. يُعد SVN مناسبًا لإدارة الملفات الثنائية الكبيرة (مثل أصول الألعاب)، لكننا نوصي باستخدام Git للمشاريع الجديدة.

📖 ملخص


📝 تمارين

  1. السؤال الأساسي: اشرح بعباراتك الخاصة الفرق بين «التحكم في الإصدارات الموزع» و«التحكم في الإصدارات المركزي»، مع ذكر ثلاث نقاط على الأقل.

  2. سؤال متقدم: ابحث عن المشاريع أو الشركات في منطقتك لمعرفة أدوات التحكم في الإصدارات التي تستخدمها، ولماذا اختارت تلك الأدوات.

  3. التحدي: اقرأ الرسالة الإلكترونية الأصلية التي كتبها لينوس تورفالدس حول Git (ابحث عن «قائمة بريد لينوس تورفالدس الخاصة بـ Git») للتعرف على الخلفية وفلسفة التصميم الكامنة وراء إنشاء Git.

Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%