مقدمة إلى نظام Git

تخيّل أنك تعمل على تصميم برنامج معيّن وتحتفظ بنسخة منه على حاسوبك (ملف النسخة 1)، ثم تخيل أنك تريد عمل تعديلات مختلفة على البرنامج دون المساس بالنسخة اﻷولى، سوف تصنع (ملف النسخة 2)، ثم تصنع نسخة ثالثة فرابعة وخامسة إلخ… حيث أنك تضيف ميّزاتٍ مع مرور الزمن ولكنك في نفس الوقت تريد الاحتفاظ بالمراحل السابقة (النسخ) قبل إضافة ميّزة معيّنة ﻷسباب كثيرة، فتعمد إلى استعمال تلك الطريقة في إنشاء العديد من الملفات تباعًا، كما ترى: إن هذا اﻷمر غير عمليّ بالمرة وممل جدًا ومضيع للوقت، وهو عرضة للنسيان والخطأ.

وتخيّل أيضًا أنك كتبتَ ميّزة جديدة قامت بتدمير الكود وإحداث أخطاء في البرنامج، ولقد نسيتَ الاحتفاظ بنسخة سابقة، وأنت لا تستطيع الرجوع للخلف، ماذا سوف تفعل؟! ولنفرض مثلًا أن القرص الصلب على حاسوبك قد أصيب بخلل قاتل منعه من العمل (ضاعت كل ملفات مشروعك!)، واﻷمر أبعد من ذلك، فربما تشارك تطوير البرنامج مع أشخاص آخرين وتضيفون تعديلاتٍ وتحذفون، إن استعمالكم لطريقة الملفات أعلاه سوف تسبب تضاربات وتعارضات كثيرة.

Git

لهذا السبب تم اختراع Git وهو عبارة عن Version Control System (أيّ نظام التحكم بالنُسخ واﻹصدارات الخاصة بالمشاريع)، وهنالك العديد من هذه الأنظمة مثل CVS, SVN, Mercurial, Fossil ولكن أشهرهم النظام ذائع الصيت Git، والذي طوّره مؤسس لينكس “لينوس تورفالدز”.

Git نظام مفتوح المصدر تستخدمه العديد من الشركات وجماعات التطوير في إدارة إصدارات برامجها ومشاريعها؛ لعل أشهر مثال على ذلك هي شركة Microsoft التي تستعمله في إدارة تطوير نظام Windows!

وتوجد العديد من المواقع ومستودعات البرامج التي هي مثال تطبيقي على استخدام نظام Git أشهرها هو موقع الويب أو مستودع GitHub، ولكن يمكنك أيضًا استعمال Git بدون GitHub، إلا أن هذا اﻷخير مستخدم على نطاقٍ واسع جدًا من قبل الكثير من الناس، ويمكنك مراجعة موضوعنا السابق (دليل المبتدئين إلى GitHub).

Git snapshots

الـ snapshots المميزة الرئيسية في نظام Git، فكما يبدو من اسمها أنها لقطات من المشروع، إذّ يقوم Git بتخزين التعديلات التي تقوم بها على مرّ الزمان فيما يُعرف مجازًا باللقطات، بحيث يمكنك الرجوع إلى أي نسخة سابقة من المشروع، فهو مثل الكاميرا يلتقط كل شيء.

إذا كنتَ تتعاون مع شخص آخر في التطوير يمكنك دمج هذه التغييرات في فرع branch العمل خاصتك، وبالتالي فإن ذلك الشخص سوف يحصل على تلك النسخة الجديدة التي تم دمجها وسوف يستمر بالعمل بدءًا منها.

Git distributes

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

لهذا السبب صمم Git، ﻷجل عملية التطوير الموزعة distributed، إذا كنت مشاركًا في مشروع ما، تقوم باستنساخ clone مستودع المشروع repository، ومن ثم العمل عليه كما لو أنه كان النسخة الوحيدة، ثم ومع بعض اﻷوامر البسيطة يمكنك سحب pull أي تغييرات من المساهمين اﻵخرين، ويمكنك أيضًا دفع push تغييراتك إلى المساهمين اﻵخرين.

بناءً على ما سبق، لن يحصل أي لبس في عملية التطوير ولا فيما لديكم من إصدارات مختلفة.

Git interfaces

في الحالة الطبيعية Git هو أحد التطبيقات التي تعمل على نظام لينكس، إنه مجاني ومفتوح المصدر، وهنالك العديد من الطرق للوصول والتعامل مع Git نُسميها بالـ interfaces أو الواجهات أو الوسيط المؤدي إلى التعامل مع Git ومنها:

  • لعل أكثر الوسطاء شهرة في التعامل مع git هي الـ web-based interfaces أو ما تدعى مواقع اﻹنترنت التي تعتمد git مثل GitHub وGitLab, Savannah, BitBucket, SourceForge.

  • كما يمكن التعامل مع Git من خلال file mangers أو متصفحات الملفات مثل Dolphin المتوفر على واجهة KDE.

  • وقد يأتي على صيغة file-sharing interface مثل Sparkleshare.

للمزيد حول الواجهات، راجع الويكي الرسمي.

المبادئ اﻷساسية

  • تدعى المساهمات التي يدرجها المطور إيداعًا commit ولكل إيداع رقم فريد يميزه عن غيره، ويدعى اﻹيداع أيضًا باللقطة.
  • يخزّن git قائمة اﻹيداعات والتعديلات فيما يعرف بالمستودع Repository، ذلك المستودع على اﻷغلب يكون مجلدًا يدعى git يتم إنشاؤه داخل المجلد الرئيس للمشروع، وفيه تُخزن التعديلات التي تقوم بها.
  • توجد عدة طرق للتعامل مع git سواءً من سطر اﻷوامر أو من الواجهات التي ذكرناها أعلاه.
  • يمتلك git مفهوم الفروع المتوازية branches، هذا يعني أن المطور يشتق فرعًا branch من الفرع الرئيسي master branch، أو حتى يشتق عددًا من الفروع branches، ويضيف عددًا من الإيداعات على تلك الفروع التي تم اشتقاقها من الفرع الرئيسي بحيث تكون في معزل عنه، وعن بعضها.
  • بعد الانتهاء من العمل على الفروع المُشتقة، نذهب إلى دمج الفروع نحو الفرع الرئيسي Branches merging، بعد أن أصبحت تلك الفروع جاهزة للاندماج بعدما أضيفت التعديلات اللازمة.
  • يستخدم git العديد من الخوارزميات أو الطرق في دمج الفروع بما فيها fast forward و3-Way.
  • يمتلك git العديد من اﻷساليب لحل التعارضات في الدمج، والتراجع عن مجموعة من التعديلات.
  • يمتلك git سجلًا لعرض تفاصيل الإيداعات عوضًا عن اسم المؤلف وتاريخ اﻹيداع، ويوفر إمكانية تخصيص طرق عرض تلك التفاصيل.
  • هذا كله غيّض من فيّض؛ يمكنك مراجعة هذا الكتيب الجميل والذي لا يزيد عن 84 صفحة والذي يشرح لك ما تريد معرفته وكيفية التعامل مع git.

[opensource]

مشاركة