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

مرحبا! ستبدأ OTUS الأسبوع المقبل "ورشة عمل فائقة حول استخدام وتكوين GIT" . هذا ما قررت تكريسه لمنشور اليوم.










المقدمة



أقترح مناقشة الغرض والطرق المختلفة لتنظيم أنظمة التحكم في الإصدارات.



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



نظام التحكم في الإصدار هو في الأساس أداة ، والأداة مصممة لحل فئة معينة من المشاكل. لذلك ، فإن نظام التحكم في الإصدار هو نظام يسجل التغييرات

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



كيف أقوم بتخزين إصدارات مختلفة من الملفات؟ لم يأت الناس إلى أداة مثل أنظمة التحكم في الإصدار على الفور ، وهم أنفسهم مختلفون تمامًا. يمكن حل المشكلة المقترحة باستخدام أنظمة التحكم في النسخ القديمة أو المحلية أو المركزية أو الموزعة.



نسخ ولصق



قد تبدو الطريقة المعروفة ، عند تطبيقها على هذه المشكلة ، على النحو التالي: سنقوم بتسمية الملفات من خلال اسم الملف _ {الإصدار} ، ربما مع إضافة وقت الإنشاء أو التعديل.



هذه الطريقة بسيطة للغاية ، لكنها عرضة لأخطاء مختلفة: يمكنك عن طريق الخطأ تغيير الملف الخطأ ، يمكنك النسخ من الدليل الخطأ (بعد كل شيء ، هذه هي الطريقة التي يتم بها نقل الملفات في هذا النموذج).



نظام التحكم في الإصدار المحلي



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



أحد الأمثلة على هذه الأنظمة هو نظام التحكم في إصدار RCS ، والذي تم تطويره في عام 1985 (تمت كتابة آخر تصحيح في عام 2015) ويقوم بتخزين التغييرات في الملفات (التصحيحات) مع الحفاظ على التحكم في الإصدار. تسمح لك مجموعة من هذه التغييرات باستعادة أي حالة للملف. يأتي RCS مع Linux.



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



نظام مركزي للتحكم في الإصدار



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



لتنظيم مثل هذا النظام للتحكم في الإصدار ، يتم استخدام خادم واحد يحتوي على جميع إصدارات الملفات. يحصل العملاء الذين يصلون إلى هذا الخادم من هذا المستودع المركزي. كان استخدام أنظمة التحكم في الإصدار المركزي هو المعيار لسنوات عديدة. وتشمل هذه CVS و Subversion و Perforce.



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



على الرغم من حقيقة أن موضة SVN قد مرت ، في بعض الأحيان يكون هناك تحرك عكسي - الانتقال من Git إلى SVN. النقطة المهمة هي أن SVN يسمح بالسحب الانتقائي ، والذي يتضمن تنزيل بعض الملفات فقط من الخادم. يكتسب هذا النهج شعبية عند استخدام المستودعات الأحادية ، والتي يمكن مناقشتها لاحقًا.



نظام التحكم في النسخ الموزعة



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



جميع النسخ متساوية ويمكن مزامنتها مع بعضها البعض. هذا النهج مشابه جدًا (وهو بالفعل) النسخ المتماثل الرئيسي.



يتضمن هذا النوع من أنظمة التحكم في الإصدار Mercurial و Bazaar و Darcs و Git. ستتم مناقشة آخر نظام للتحكم في الإصدار بمزيد من التفاصيل أدناه.



تاريخ بوابة



في عام 2005 ، قطعت شركة BitKeeper للتحكم في الإصدار العلاقات مع مجتمع Linux kernel. قرر المجتمع بعد ذلك تطوير نظام التحكم في الإصدار الخاص بهم. القيم الرئيسية للنظام الجديد هي: اللامركزية الكاملة ، السرعة ، الهندسة المعمارية البسيطة ، الدعم الجيد للتطور غير الخطي.



خاتمة



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






All Articles