آلية عمل Git - مقدمة


مقدمة

من المهم جداً لأي مطور برمجيات (باختلاف اختصاصاتهم ومستوياتهم) أن يكونو قادرين على استخدام Git.
لتحقيق ذلك, يمكننا ان نقوم بحفظ بعض التعليمات والخطوات والعمل بها من دون الحاجة الى فهم آلية عملها.
لكن, نظراً لأهمية Git ولأنه أداة أساسية (لا يمكن الاستغناء عنها) في مجال تطوير البرمجيات, استيعاب وفهم آلية عمله سيجعل استخدامه أسهل وأكثر فعاليّة وسيزيد مستوى الثقة لدينا عند التعامل معه.
لذلك, سأقوم بكتابة مجموعة من المقالات لتسليط الضوء على آلية عمل Git وبعض المواضيع المتقدمة عنه.


🧭
في هذه المقالة سنقوم بتعريف Git والحديث عن خصائصه وفوائده وبعض سلبياته (حدوده) ونختم بقصة تاريخية عن سبب نشئته وتطويره.

ما هو Git

هو في الأساس نظام ملفات باسلوب عنونة المحتوى, وقد تم بناء نظام موزّع للتحكم في الاصدار فوق نظام الملفات.
الكثير من علامات الاستفهام تدور حول الجملة السابقة, لنقوم بشرح تفصيلي لأجزائها:

  • نظام الملفات (File System): بإيجاز, يقوم نظام الملفات بتنظيم الملفات وتخزينها والوصول إليها على جهاز التخزين.
  • نظام الملفات باسلوب عنونة المحتوى (Content-Addressable File System): يقوم نظام الملفات الموجود في نظم التشغيل (ويندوز, لينوكس, الخ) بتخزين الملفات في مواقع محددة على جهاز تخزين ويتم الوصول إليها من خلال مسار الملفات الخاصة بهم, وهذا ما يسمى باسلوب عنونة الموقع (Location-Addressable), أما بالنسبة لاسلوب عنونة المحتوى يتم تخزين الملفات بناءً على محتواها ، بدلاً من موقعها ، ويتم الوصول إليها عن طريق معرّف خاص (Unique Hash) لمحتواها. (سيتم التحدث عن هذا الموضوع اكثر في مقالات أخرى)
  • نظام للتحكم في الاصدار (Version Control System): يقوم بتتبع وتسجيل التغييرات التي تحصل على ملف او مجموعة من الملفات على مر الزمن, بيحث يمكنك العودة الى هذه الاصدارات (النسخ) في اي وقت.
  • نظام موزّع للتحكم في الاصدار (Distributed Version Control System): هو نوع من أنواع انظمة التحكم في الاصدار, حيث يتم تخزين الاصدارات كاملة عند جميع مستخدمين النظام, اي أن كل مستخدم يقوم بالحصول على جميع الاصدارات والبيانات, على غرار أنواع اخرى سابقة, التي كانت تقوم بتخزين جميع الاصدارات فقط على جهاز واحد, ويقوم المستخدمين بالحصول على إصدار محدد فقط (آخر إصدار مثلاً).

لماذا؟ (أهمية Git)

من الناحية النظرية (على الورق فقط 📄) "يمكن" أن يتم تطوير البرمجيات دون استخدام Git, لكن من الناحية العملية ونظراً لطبيعة عملية تطوير البرمجيات لا يمكن العمل بفعالية وكفائة دون استخدام Git, للاسباب التالية:

  • التجارب: يقوم Git بتسهيل إجراء التجارب على الملفات وتغييرها من دون الخوف من فقدانها او التأثير على ملفات أفراد الفريق, يمكننا العودة الى نقطة البداية في اي لحظة بغض النظر عن نتيجة التجربة.
    عادةً في الألعاب, يوجد مكان او نقطة في اللعبة, عند الوصول اليها يتم حفظ كل ماقمت بتحقيقه حتى هذه اللحظة, في حال موت شخصية اللاعب, تتجدد الشخصية عند آخر نقطة وصل إليها (هل يمكنك تخيل ان تقوم باللعب بدون هذه الميزة؟). يقوم Git بتوفير هذه الميزة عند التعامل مع الملفات.
  • فَصل "الحفظ" عن "المشاركة": بإمكانك حفظ ملفاتك أكثر من مرة وبأكثر من إصدار من دون الحاجة إلا مشاركتها بشكل كلّي أو جزئي بشكل فوري (أو عدم مشاركتها على الإطلاق). يمكننا تشبيه هذا الأمر (الفصل) بعملية تسجيل وحفظ الفيديو (مرحلة "الحفظ"), ثم القيام بتعديل وتنقيح الفيديو قبل مشاركته (مرحلة "المشاركة").
  • التعاون : يمكننا إجراء تغييرات بدون إزعاج أعضاء الفريق, لأن Git هو نظام موزّع (كما ذكر سابقاً).

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

   

الفوائد والمميّزات

بشكل عام, عندما نتحدث عن فوائد امر ما, يجب ان نبدأ بالمشاكل التي يقوم بحلها.

قصة قصيرة:
هل تذكر عندما كنت تعمل على ملف ما , وقمت بحفظ نسخة منه, وقمت بتسميتها "آخر نسخة", وبعد مراجعته وجدت انك نسيت اضافة جزء مهم, فقمت باضافته وحفظ الملف مرة اخرى تحت اسم "آخر آخر نسخة", وفي نهاية المطاف تجد نفسك تتعامل مع مجلد يحتوي نسخ كثيرة من نفس الملف مع اختلاف في اصداراتها وباسماء غريبة عجيبة, ووجود ملف واحد (اذا حالفك الحظ) يحتوي على النسخة النهائية!
هنا يأتي دور انظمة التحكم في الاصدار (Git هو احد انواع هذه الانظمة).

لكن ما الذي يميّز Git عن غيره ولماذا حصل على هذا الانتشار الواسع؟
لنتكلم عن بعض مميّزات Git:

  • السرعة: تقريباً, معظم العمليات في Git تحصل على الجهاز نفسه (بشكل محلي).
  • موزّع بشكل كامل: كل شخص يستخدم Git يقوم بالحصول على جميع البيانات والاصدارات (كما ذكرنا سابقاً)
  • سهولة انشاء أفرع بشكل متوازي: يتيح امكانية العمل على اكثر من فرع (Branch) (نسخة) من البيانات بنفس اللحظة ثم دمج هذه الافرع سويةً.

ربما يوجد لديك بعض الأمور المبهمة, سأقوم بشرح المزيد في مقالات لاحقة.

السلبيات

نعم, على الرغم من العديد من المميّزات, لكن يوجد بعض السلبيات لنظام Git (هذا أمر طبيعي في أي شيء).
بعض هذه السلبيات (الحدود):

  • المعرفة التقنية: للتعامل مع Git, يجب ان يكون لدى الشخص معرفة تقنية, وليس من السهل لمستخدم غير تقني ان يتعامل معه.
  • الملفات الثنائية: لا يمكن التعامل مع الملفات الثنائية (Binary files) كالملفات التنفيذية وغيرها في Git.

قصة نشأت Git

قبل عام ٢٠٠٢, كان المجتمع المسؤول عن تطوير نواة نظام لينكس يقوم بنسخ التغييرات الحاصلة على النظام عن طريق مشاركة الاجزاء المتغيرة وارشفة الملفات فيما بينهم (كم نحن محظوظين حالياً لوجود العديد من الامور التي تسهل عملنا).

في عام ٢٠٠٢, بدأ هذا المجتمع باستخدام نظام خاص موّزع للتحكم بالاصدار يدعى "BitKeeper" (بشكل مجاني).

لكن, في عام ٢٠٠٥, لم تعد العلاقة طيبة بين هذا المجتمع وبين الشركة التجارية التي قامت بتطوير نظام "BitKeeper", حيث قامت هذه الشركة بمنع المجتمع من استخدام النظام بشكل مجاني.

هذا ما دفع هذا المجتمع (بقيادة لينوس تورفالدس) لتطوير نظام التحكم بالاصدار الخاص بهم, مستفيدين من الدروس والتجارب التي حصلت معهم أثناء استخدام نظام "BitKeeper".

وهكذا تمت ولادة نظام Git, حيث تطور عبر هذه السنين ليصبح سهل الاستخدام ومستقر ومفيد, والأهم من ذلك, أنه مجاني ومفتوح المصدر.

  

   

الخاتمة

قمنا في هذه المقالة بالتعريف بنظام Git واهميته, بالاضافة الى سرد بعض خصائصه وميزاته وسلبياته, ثم تحدثنا عن تاريخه ونشأته, ما هذه إلا مقدمة أساسية لا غنى عنها قبل البدء بالحديث وشرح آلية عمله في مقالات لاحقة.

شكراً لوقتك, اتمنى أن تكون قد استمتعت واستفدت بشيء ما, لا تتردد بالتعليق على المقالة للنقاش او للاسئلة, يمكنك مشاركة المقالة لتحقيق استفادة اكبر, ويمكنك التواصل معي على منصة لينكد ان أو عن طريق البريد الالكتروني.
مع تمنياتي بالتوفيق والنجاح للجميع.