استكشاف التحكم في الإصدار باستخدام Git

مكتمل

هناك أنواع مختلفة من أنظمة التحكم في الإصدار (VCS)، ولكن بشكل عام يمكن تصنيفها على أنها مركزية وموزعة. في السنوات الأخيرة (جزئيا بسبب الشعبية المتزايدة ل DevOps)، اكتسبت الفئة الأخيرة شعبية كبيرة، مع تحول Git إلى المعيار الفعلي في تطوير البرمجيات الحديثة. سيكون VCS المحدد هذا هو الخيار الأنسب للمؤسسة في سيناريو العينة الخاص بنا، خاصة بالنظر إلى نيتها استخدام GitHub كمنصة مستهدفة للانتقال إلى DevOps. في هذه الوحدة، استكشف استخدام Git كعنصر تحكم في الإصدار.

لقطة شاشة لجدول يقارن فوائد أنظمة التحكم في الإصدار المركزية والموزعة.

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

توفر كل من أنظمة التحكم المركزية في الإصدار (CVCS) وأنظمة التحكم في الإصدار الموزع (DVCS) القدرة على إدارة وتعقب التغييرات في مشاريع تطوير البرامج. ترتبط الاختلافات الأساسية بينهما بالطريقة التي تنفذ بها المستودعات والتعاون. على وجه الخصوص:

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

تجدر الإشارة إلى أنه في حين أن النموذج الموزع لا يعتمد على وجود مستودع مركزي (بالمعنى التقليدي)، فمن الشائع تنفيذ نسخة واحدة من المستودع، والتي تستضيفها خدمات مثل GitHub أو GitLab أو Bitbucket. يعمل هذا المثيل كنقطة محورية للتعاون والمزامنة.

لقطة شاشة لمستودعات أنظمة التحكم في الإصدار المركزية والموزعة والتعاون.

مصطلحات Git

من أجل أن تصبح بارعا في العمل مع Git، من المهم أن تصبح على دراية بمصطلحاته. بعض المفاهيم فريدة من نوعها ل Git، وتمييزها عن DVCS الأخرى. تتضمن شروط Git الأساسية ما يلي:

  • شجرة العمل: بنية دليل تحتوي على كافة ملفات المشروع.
  • Repository (يشار إليها عادة باسم repo): الدليل الموجود في المستوى الأعلى من شجرة العمل، ويستضيف جميع ملفات المشروع إلى جانب محفوظات إصدارات هذه الملفات.
  • Clone: إجراء إنشاء نسخة من مستودع بعيد على جهاز محلي للعمل على مشروع يمكنك الوصول إليه.
  • Fork: إجراء إنشاء نسخة مستضافة من GitHub من مستودع بعيد للعمل على مشروع لا يمكنك الوصول إليه. عادة ما يتم استخدام نسخة المستودع إذا كنت تنوي المساهمة في مشروع شخص آخر أو إنشاء إصدار خاص بك من هذا المشروع. في حين أنه ليس لديك حق الوصول للكتابة إلى المستودع الأصلي، يمكنك إدارة نسختك بالكامل.
  • Commit: لقطة للتغييرات التي تم إجراؤها على الملفات في مستودع في نقطة زمنية معينة. يتم استخدام عمليات التثبيت لتسجيل التغييرات وحفظها.
  • منطقة التقسيم المرحلي موقع وسيط (وهو ليس جزءا من المستودع) حيث يتم إعداد التغييرات على الملفات في شجرة العمل قبل الالتزام بها. يسمح للمطورين بتحديد التغييرات التي يعتزمون الالتزام بها.
  • Branch: سلسلة مسماة من التثبيتات المرتبطة. بعبارات بسيطة، يمثل الفرع إصدارا مميزا من المشروع. وهذا يمكن العمل على أجزاء مختلفة من المشروع في نفس الوقت دون التأثير على إصداره الرئيسي. يسمى التثبيت الأحدث داخل فرع رأس. يسمى الفرع الافتراضي الذي يتم إنشاؤه تلقائيا عند تهيئة مستودع الرئيسي أو الرئيسي.
  • دمج: عملية دمج التغييرات من فرع (أو تثبيت) في فرع آخر. وهذا يدمج التغييرات من فرع إلى آخر.
  • Object: أحد أنواع الكيانات الأربعة المتوفرة في المستودع. تتضمن هذه الكيانات الكائنات الثنائية كبيرة الحجم تمثل ملفات فردية، وشجرة تمثل شجرة عمل، الالتزام تمثل إصدارا معينا من شجرة العمل، وعلامة *، وهي تسمية معينة إلى تثبيت فردي.
  • تجزئة: معرف فريد ومحدد الطول تم إنشاؤه تلقائيا يمثل محتويات كائن. كلما تغير هذا الكائن، تتغير التجزئة الخاصة به أيضا. يسمح هذا ل Git بتحديد المحتوى داخل المستودع الذي تم تحديثه.
  • Remote: مرجع إلى مستودع آخر (بخلاف المستودع المحلي)، يشير عادة إلى مثيل المستضاف من قبل الخدمة للمستودع. يعمل هذا كإعداد افتراضي لعمليات الدفع والسحب.
  • Pull: الإجراء الذي يجلب التغييرات من مستودع بعيد ويدمجها في الفرع الحالي.
  • push: الإجراء الذي يرسل عمليات التثبيت المحلية إلى مستودع بعيد، وتحديثه بالتغييرات التي تم إجراؤها محليا.
  • Fetch: الإجراء الذي يسترد التغييرات من مستودع بعيد دون دمجها تلقائيا. يسمح هذا بمراجعة قبل تطبيق الدمج.
  • طلب السحب: ميزة في منصات الاستضافة المستندة إلى Git (مثل GitHub) تسمح للمطورين باقتراح تغييرات وطلب دمجها في فرع مستهدف.

يحتوي Git أيضا على مجموعة واسعة من الأوامر، والتي توفر القدرة على تنفيذ وإدارة التحكم في الإصدار بالكامل من خلال shell الأوامر مثل Linux Bash أو موجه أوامر Windows. بدلا من ذلك، يمكنك إدارة Git من خلال تطبيقات سطح المكتب مثل GitHub Desktop. توفر منصات الاستضافة المستندة إلى Git واجهة ويب تسهل التفاعل مع المستودعات من جانب الخدمة.

Git مقابل GitHub

كما هو موضح سابقا، Git هو نظام أساسي متعدد، وDVCS مفتوح المصدر يسهل التعاون باستخدام المستودعات المحلية، والتي يمكن مزامنتها مع المستودعات البعيدة. GitHub هي خدمة مستندة إلى السحابة توفر منصة استضافة لمستودعات Git. وهو يوسع نطاق قدرات Git من خلال تضمين الدعم لما يلي:

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