نظام التحكم في الإصدار
نظام التحكم في الإصدار(من الانجليزية نظام التحكم بالإصدار VCSأو نظام التحكم في المراجعة) - برنامج لتسهيل العمل مع المعلومات المتغيرة. يسمح لك نظام التحكم في الإصدار بتخزين إصدارات متعددة من نفس المستند، والعودة إلى الإصدارات السابقة إذا لزم الأمر، وتحديد من قام بإجراء تغيير معين ومتى، وغير ذلك الكثير.
تُستخدم هذه الأنظمة على نطاق واسع في تطوير البرمجيات لتخزين أكواد المصدر للبرنامج الجاري تطويره. ومع ذلك، يمكن استخدامها بنجاح في مجالات أخرى حيث يتم العمل مع عدد كبير من المستندات الإلكترونية المتغيرة باستمرار. على وجه الخصوص، يتم استخدام أنظمة التحكم في الإصدار في CAD، عادةً كجزء من أنظمة إدارة بيانات المنتج (PDM). يتم استخدام الإصدار في أدوات إدارة التكوين ( أدوات إدارة تكوين البرمجيات).
عند تحديد مقبولية دمج التغييرات داخل نفس الملف النصي، تعمل آلية قياسية لمقارنة النص سطرًا بسطر (مثال على تنفيذها هو الأداة المساعدة لنظام GNU diff)، والتي تقارن الإصدارات المدمجة بالنسخة الأساسية وتبني نسخة قائمة التغييرات، أي إضافة وحذف واستبدال مجموعات من الأسطر. الحد الأدنى لوحدة البيانات لهذه الخوارزمية هو سلسلة؛ حتى أصغر الفرق يجعل السلاسل مختلفة. مع الأخذ في الاعتبار أن الأحرف المحددة، في معظم الحالات، لا تحمل أي حمل دلالي، يمكن لآلية الدمج تجاهل هذه الأحرف عند مقارنة السلاسل.
تعتبر مجموعات السلاسل التي تم تغييرها والتي لا تتقاطع متوافقة ويتم دمجها تلقائيًا. إذا كانت الملفات المدمجة تحتوي على تغييرات تؤثر على نفس سطر الملف، فهذا يؤدي إلى حدوث تعارض. ولا يمكن دمج هذه الملفات إلا يدويًا. تعتبر أي ملفات بخلاف الملفات النصية ثنائية من وجهة نظر VCS ولا تسمح بالدمج التلقائي.
يُطلق على الموقف عندما تتقاطع التغييرات التي تم إجراؤها فيها مع بعضها البعض عند دمج العديد من الإصدارات صراع. إذا كان هناك تعارض في التغييرات، فلن يتمكن نظام التحكم في الإصدار من إنشاء مشروع مدمج تلقائيًا ويضطر إلى الاتصال بالمطور. كما ذكر أعلاه، يمكن أن تنشأ الصراعات في مراحل إجراء التغييرات أو تحديث أو دمج الفروع. في جميع الحالات، عند اكتشاف تعارض، يتم إيقاف العملية المقابلة حتى يتم حله. بعض الأنظمة (مثل Subversion) لا تحاول حتى حل التعارضات في مرحلة الالتزام أو مرحلة الجذع الفرعي؛ في حالة ظهور مثل هذه التعارضات، يتم إلغاء العملية بالكامل ويطلب من المطور تحديث نسخة العمل أولاً (من الواضح أن نفس التعارضات ستنشأ)، وحل التعارضات، وبعد ذلك فقط دمج تغييراته في الفرع الأساسي.
لحل التعارض، يقدم النظام بشكل عام للمطور ثلاثة خيارات للملفات المتعارضة: الأساسية والمحلية والخادم. يتم عرض التغييرات المتعارضة إما للمطور في وحدة برامج خاصة لدمج التغييرات (في هذه الحالة، يتم عرض الخيارات المدمجة والإصدار المدمج من الملف الذي يتغير ديناميكيًا وفقًا لأوامر المستخدم)، أو يتم تمييزها ببساطة بعلامات خاصة مباشرة في نص الملف المدمج (ثم يجب على المطور إنشاء النص المطلوب بنفسه في المناطق المتنازع عليها والحفاظ عليه).
يتم حل التعارضات في نظام الملفات بسهولة أكبر: فقط حذف ملف يمكن أن يتعارض مع إحدى العمليات الأخرى، ولا يهم ترتيب الملفات في الدليل، لذلك يمكن للمطور فقط اختيار العملية التي يجب حفظها في الدليل. النسخة المدمجة.
تسمح آلية القفل لأحد المطورين بالاستخدام الحصري لملف أو مجموعة من الملفات لإجراء تغييرات عليها. أثناء قفل الملف، يظل للقراءة فقط لجميع المطورين الآخرين، ويرفض الخادم أي محاولة لإجراء تغييرات عليه. من الناحية الفنية، يمكن تنظيم الحظر بطرق مختلفة. الآلية التالية نموذجية للأنظمة الحديثة.
الاستخدام المكثف للأقفال، عندما تكون جميع أو معظم الملفات في المشروع قابلة للقفل ولأي تغييرات يكون من الضروري قفل مجموعة الملفات المقابلة، يُطلق عليه أيضًا استراتيجية "الخروج المقفل". دعمت أنظمة التحكم في الإصدارات المبكرة هذه الإستراتيجية بشكل حصري، وبالتالي منع حدوث الصراعات في المقام الأول. في VCS الحديثة، يُفضل استخدام عمليات الاسترجاع غير المحظورة، في حين يعتبر الحظر شرًا ضروريًا يجب الحد منه كلما أمكن ذلك. عيوب استخدام الأقفال واضحة:
من ناحية أخرى، في بعض الحالات يكون استخدام الأقفال مبررًا تمامًا. من الأمثلة الواضحة على ذلك تنظيم العمل مع الملفات الثنائية التي لا توجد لها أدوات لدمج التغييرات أو أن هذا الدمج مستحيل بشكل أساسي (كما هو الحال مع ملفات الصور على سبيل المثال). إذا لم يكن الدمج التلقائي ممكنًا، ففي ظل ظروف التشغيل العادية، فإن أي تغييرات متوازية في الملفات المماثلة ستؤدي إلى حدوث تعارض. في هذه الحالة، يكون من الملائم أكثر جعل مثل هذا الملف قابلاً للقفل للتأكد من أن أي تغييرات عليه سيتم إجراؤها بشكل تسلسلي فقط.
يضمن نظام التحكم في الإصدار تخزين جميع الإصدارات الموجودة من الملفات، ونتيجة لذلك، جميع إصدارات المشروع ككل التي حدثت منذ بداية تطويره. لكن مفهوم "الإصدار" في الأنظمة المختلفة يمكن تفسيره بطريقتين مختلفتين.
تدعم بعض الأنظمة الإصدار ملفات. وهذا يعني أن أي ملف يظهر في المشروع يتلقى رقم الإصدار الخاص به (عادة رقم 1؛ الإصدار "الصفري" المشروط للملف هو ملف فارغ يحمل نفس الاسم). في كل مرة يقوم فيها المطور بإجراء تغييرات على ملف، يتم تطبيق الجزء المقابل من التغييرات الملتزم بها على الملف ويتلقى الملف رقم إصدار جديد، متسلسل عادةً. نظرًا لأن عمليات التنفيذ تؤثر عادةً على جزء فقط من الملفات الموجودة في المستودع، فإن أرقام إصدارات الملفات المتوفرة في نفس الوقت تختلف بمرور الوقت، ولا يؤثر المشروع ككل (أي مجموعة الملفات بأكملها في المستودع) ليس لديه في الواقع أي "رقم إصدار"، لأنه يتكون من العديد من الملفات بأرقام إصدارات مختلفة. على سبيل المثال، يعمل نظام التحكم في إصدار CVS بطريقة مماثلة.
بالنسبة للأنظمة الأخرى، لا يشير مفهوم "الإصدار" إلى ملف فردي، بل إلى مخزنتماما. يحتوي المستودع الفارغ الذي تم إنشاؤه حديثًا على الإصدار 1 أو 0، وأي التزام بالتغييرات يؤدي إلى زيادة في هذا الرقم (أي، حتى إذا تغير ملف واحد بمقدار بايت واحد، فإن المستودع بأكمله يعتبر متغيرًا ويتلقى رقم إصدار جديد). هذه هي الطريقة التي يتم بها تفسير أرقام الإصدارات، على سبيل المثال، بواسطة نظام Subversion. في الواقع، رقم إصدار الملف الفردي هنا غير موجود، يمكننا أن نعتبر رقم الإصدار الحالي للمستودع كذلك (أي، نفترض أنه مع كل تغيير يتم إجراؤه على المستودع، فإن جميع ملفاته تغير الإصدار؛ الرقم، حتى تلك التي لم تتغير). في بعض الأحيان، عند الحديث عن "إصدار ملف" في مثل هذه الأنظمة، فإنهم يقصدون إصدار المستودع الذي تم تعديل الملف فيه آخر مرة (قبل اللحظة التي تهمنا).
لأغراض عملية، عادةً لا يكون الملف الفردي هو المهم، بل المشروع بأكمله. في الأنظمة التي تدعم إصدار الملفات الفردية، يمكن استخدام التاريخ والوقت لتحديد إصدار معين من المشروع - ثم يتكون إصدار المشروع من إصدارات الملفات المضمنة فيه والتي كانت موجودة في المستودع في وقت محدد . إذا كان إصدار المستودع ككل مدعومًا، فيمكن أن يكون رقم إصدار المشروع هو رقم إصدار المستودع. ومع ذلك، فإن كلا الخيارين ليسا مناسبين للغاية، حيث لا يحمل التاريخ ولا رقم إصدار المستودع عادة معلومات حول التغييرات المهمة في المشروع، حول المدة التي عملوا فيها بشكل مكثف. ولتحديد إصدارات المشروع (أو أجزائه) بشكل أكثر ملاءمة، تدعم أنظمة التحكم في الإصدار هذا المفهوم العلامات.
بطاقة شعارهي تسمية رمزية يمكن ربطها بإصدار محدد من ملف و/أو دليل في المستودع. باستخدام الأمر المناسب، يمكن تعيين تسمية معينة لكل أو جزء من ملفات المشروع التي تستوفي شروطًا معينة (على سبيل المثال، المضمنة في الإصدار الرئيسي للفرع الرئيسي للمشروع في وقت معين). بهذه الطريقة، يمكنك تحديد إصدار المشروع (الإصدار "XX.XXX.XXX" هو مجموعة من إصدارات ملفات المستودع مع العلامة "XX.XXX.XXX")، وبالتالي تحديد حالته في بعض اللحظات المطلوبة. كقاعدة عامة، يكون نظام وضع العلامات مرنًا للغاية ويسمح لك بوضع علامة على إصدارات متعددة من الملفات والأدلة بعلامة واحدة. يتيح لك هذا إنشاء "نسخة المشروع" بأي طريقة تعسفية. من وجهة نظر مستخدم النظام، قد تبدو العلامات مختلفة. في بعض الأنظمة، يتم تصويرها بدقة كعلامة (يمكن إنشاء علامة أو تطبيقها على إصدارات معينة من الملفات والأدلة أو إزالتها). في الأنظمة الأخرى (على سبيل المثال، Subversion)، تكون العلامة ببساطة دليلًا منفصلاً في شجرة ملفات المستودع، حيث يتم عمل نسخ من الإصدارات المطلوبة من الملفات من صندوق المشروع وفروعه باستخدام أمر النسخ. لذا فإن العلامة بصريًا هي مجرد نسخة من إصدارات معينة من ملفات المستودع الموضوعة في دليل منفصل. وفقًا للاتفاقية، لا يُسمح لشجرة الدليل المقابلة للعلامة بإجراء تغييرات (أي أن إصدار المشروع الذي تمثله العلامة غير قابل للتغيير).
يتم تحديد إجراءات استخدام نظام التحكم في الإصدار في كل حالة محددة من خلال اللوائح والقواعد الفنية المعتمدة من قبل الشركة أو المؤسسة المحددة التي تقوم بتطوير المشروع. ومع ذلك، فإن المبادئ العامة للاستخدام الصحيح لـ VCS قليلة وهي نفسها لجميع أنظمة التطوير والتحكم في الإصدار.
أهلا هبر. قررت أن أتطرق إلى موضوع تم استنفاده في العديد من المقالات، وبشكل أكثر تحديدًا، لوصف الاستخدام غير القياسي إلى حد كبير (أود أن أقول، غير المصنف) لأنظمة التحكم في الإصدار (المشار إليها فيما يلي باسم VCS). زملائي المبرمجين، دعونا نخفي الطماطم الفاسدة ونمضي قدمًا، لأن هذا المقال ليس لك. نعم، لقد تعلمتم جميعًا بالفعل جميع تعقيدات Git وSVN وCVS وتعرفون العديد من الكلمات الطنانة الأخرى. دعونا، مجرد بشر، نتعرف على كل مزايا استخدام العملة الصعبة.
أدعو كل من يريد التعرف على نظام العملة الصعبة، وكذلك كل من يتعامل بطريقة أو بأخرى مع البيانات المتغيرة بسرعة.
ملاحظة: تم النقل إلى مدونة "أنظمة التحكم في الإصدار".
العلامات:
ما هو التحكم في الإصدار ولماذا تحتاجه؟ نظام التحكم في الإصدار (VCS) هو نظام يسجل التغييرات في ملف واحد أو أكثر بحيث يكون من الممكن في المستقبل العودة إلى بعض الإصدارات القديمة من هذه الملفات. سنستخدم الكود المصدري للأمثلة الواردة في هذا الكتاب، ولكن في الواقع، يمكنك وضع أي نوع من الملفات تقريبًا تحت التحكم في الإصدار.
إذا كنت مصمم رسوميات أو مصمم ويب وترغب في تخزين كل إصدار من صورة أو تخطيط - وربما ترغب في ذلك - فإن استخدام نظام التحكم في الإصدار يعد قرارًا حكيمًا للغاية. يتيح VCS إمكانية إرجاع الملفات الفردية إلى نموذجها السابق، وإعادة المشروع بأكمله إلى حالته السابقة، وعرض التغييرات التي تحدث مع مرور الوقت، وتحديد من كان آخر من قام بإجراء تغييرات على الوحدة النمطية التي توقفت فجأة عن العمل، ومن ومتى تم تقديم نوع ما من الخطأ في التعليمات البرمجية، وأكثر من ذلك بكثير. بشكل عام، إذا دمرت كل شيء أو فقدت ملفات أثناء استخدام VCS، فيمكن استعادة كل شيء بسهولة. بالإضافة إلى ذلك، فإن النفقات العامة لكل ما تحصل عليه ستكون صغيرة جدًا.
يفضل العديد من الأشخاص التحكم في الإصدارات بمجرد نسخ الملفات إلى دليل آخر (عادةً إضافة التاريخ الحالي إلى اسم الدليل). هذا النهج شائع جدًا لأنه بسيط، ولكنه يفشل أيضًا في كثير من الأحيان. من السهل جدًا أن تنسى أنك في الدليل الخطأ وقمت بتغيير الملف الخطأ عن طريق الخطأ، أو نسخ الملفات إلى المكان الخطأ والكتابة فوق الملفات التي تحتاجها.
لحل هذه المشكلة، قام المبرمجون منذ فترة طويلة بتطوير أنظمة VCS محلية بقاعدة بيانات بسيطة يتم فيها تخزين جميع التغييرات في الملفات الضرورية (انظر الشكل 1-1).
الشكل 1-1. مخطط SLE المحلي.
أحد أكثر أنظمة VCS شيوعًا من هذا النوع هو rcs، والذي لا يزال مثبتًا على العديد من أجهزة الكمبيوتر. حتى في نظام التشغيل Mac OS X الحديث، يتم تثبيت الأداة المساعدة rcs مع أدوات المطور. تعتمد هذه الأداة المساعدة على العمل مع مجموعات من التصحيحات بين أزواج من الإصدارات (التصحيح هو ملف يصف الفرق بين الملفات)، والتي يتم تخزينها بتنسيق خاص على القرص. يتيح لك ذلك إعادة إنشاء أي ملف في أي وقت، مع تطبيق التصحيحات بشكل تسلسلي.
كان التحدي الرئيسي التالي هو الحاجة إلى التعاون مع المطورين على أجهزة كمبيوتر أخرى. لحل هذه المشكلة، تم إنشاء أنظمة التحكم في الإصدار المركزي (CVCS). تمتلك مثل هذه الأنظمة، مثل CVS، وSubversion، وPerforce، خادمًا مركزيًا يقوم بتخزين جميع الملفات تحت التحكم في الإصدار، وعدد من العملاء الذين يتلقون نسخًا من الملفات منه. لقد كان هذا هو المعيار لأنظمة التحكم في الإصدار لسنوات عديدة (انظر الشكل 1-2).
الشكل 1-2. نظام التحكم في الإصدار المركزي.
يتمتع هذا النهج بالعديد من المزايا، خاصة مقارنة بـ SLE المحلي. على سبيل المثال، يعرف الجميع من يفعل ماذا في المشروع. يتمتع المسؤولون بالتحكم الواضح في من يمكنه القيام بماذا، وبطبيعة الحال، تعد إدارة CSKB أسهل بكثير من إدارة قواعد البيانات المحلية على كل عميل.
ومع ذلك، هناك العديد من العيوب الخطيرة لهذا النهج. الأكثر وضوحًا هو أن الخادم المركزي هو نقطة الضعف في النظام بأكمله. إذا تعطل الخادم لمدة ساعة، فلن يتمكن المطورون من التفاعل لمدة ساعة، ولا يمكن لأحد حفظ نسخة جديدة من عملهم. إذا كان القرص الذي يحتوي على قاعدة البيانات المركزية تالفًا ولا توجد نسخة احتياطية، فستفقد كل شيء تمامًا - تاريخ المشروع بأكمله، مع استثناء محتمل للعديد من إصدارات العمل المحفوظة على أجهزة عمل المستخدمين. تعاني أنظمة التحكم في الإصدار المحلي من نفس المشكلة: إذا تم تخزين سجل المشروع بالكامل في مكان واحد، فإنك تخاطر بفقدان كل شيء.
وفي هذه الحالة، يأتي دور أنظمة التحكم في الإصدار الموزع (DVCS). في أنظمة مثل Git أو Mercurial أو Bazaar أو Darcs، لا يقوم العملاء ببساطة بفحص أحدث الإصدارات من الملفات، بل يقومون بنسخ المستودع بأكمله. لذلك، في حالة "وفاة" الخادم الذي كان يتم العمل من خلاله، يمكن نسخ أي مستودع عميل مرة أخرى إلى الخادم لاستعادة قاعدة البيانات. في كل مرة يقوم فيها العميل بفحص أحدث إصدار من الملفات، يقوم بإنشاء نسخة كاملة من جميع البيانات لنفسه (انظر الشكل 1-3).
الشكل 1-3. رسم تخطيطي لنظام التحكم في الإصدار الموزع.
بالإضافة إلى ذلك، تتيح لك معظم هذه الأنظمة العمل مع مستودعات بعيدة متعددة، بحيث يمكنك العمل بشكل مختلف مع مجموعات مختلفة من الأشخاص في نفس المشروع وفي نفس الوقت. وبالتالي، في مشروع واحد، يمكنك إجراء عدة أنواع من عمليات العمل في وقت واحد، وهو أمر مستحيل في الأنظمة المركزية.
نظام التحكم في الإصدار ( نظام التحكم بالإصدار VCS) هو برنامج يسمح لك بتتبع التغييرات في المستندات، واستعادتها إذا لزم الأمر، وتحديد من قام بالتصحيحات ومتى، وما إلى ذلك. تتناول المقالة الأنواع VCSومبادئ عملها، وكذلك أمثلة على منتجات البرمجيات.
ربما يكون الجميع على دراية بالموقف عندما تكون هناك حاجة، عند العمل في مشروع، إلى إجراء تغييرات، ولكن في نفس الوقت تحتاج إلى حفظ نسخة قابلة للتطبيق، وفي هذه الحالة، كقاعدة عامة، يتم إنشاء مجلد جديد، من المرجح أن يكون اسمه "مجلد جديد" مع إضافة تاريخ أو ملاحظة صغيرة، ويتم نسخ نسخة العمل من المشروع فيه ويتم العمل به. مع مرور الوقت، يمكن أن يزيد عدد هذه المجلدات بشكل كبير، مما يخلق صعوبات في العودة إلى الإصدارات السابقة، وتتبع التغييرات، وما إلى ذلك. يزداد هذا الوضع سوءًا عندما يكون هناك العديد من الأشخاص الذين يعملون في مشروع ما.
لحل هذه المشكلات، يتم استخدام نظام التحكم في الإصدار، فهو يسمح لك بالعمل بشكل مريح في المشروع سواء بشكل فردي أو ضمن فريق. VCSيتتبع التغييرات في الملفات، ويوفر فرصًا لإنشاء فروع جديدة ودمج الفروع الحالية للمشروع، ويتحكم في وصول المستخدم إلى المشروع، ويسمح لك باستعادة التصحيحات وتحديد من ومتى وما هي التغييرات التي تم إجراؤها على المشروع. المفهوم الرئيسي VCSهو المستودع ( مخزن) – مخزن خاص لملفات ومجلدات المشروع، والتي يتم تتبع التغييرات فيها. لدى المطور تحت تصرفه ما يسمى "نسخة العمل" ( نسخة العمل) للمشروع الذي يعمل به مباشرة. يجب أن تتم مزامنة نسخة العمل بشكل دوري مع المستودع؛ تتضمن هذه العملية إرسال التغييرات التي أجراها المستخدم على نسخة العمل الخاصة به (تسمى هذه العملية يقترف) وتحديث نسخة العمل، حيث يتم خلالها تنزيل أحدث إصدار من المستودع إلى المستخدم (تسمى هذه العملية تحديث).
يمكن تقسيم أنظمة التحكم في الإصدار إلى مجموعتين: موزعة ومركزية.
مركزيةأنظمة التحكم في الإصدار هي تطبيقات خادم العميل، حيث يوجد مستودع المشروع في نسخة واحدة ويتم تخزينه على الخادم. تم الوصول إليه من خلال تطبيق عميل خاص.تتضمن أمثلة منتجات البرامج هذه ما يلي: CVS, التخريب.
CVS (نظام الإصدارات المتزامنة، نظام الإصدارات المتزامنة) هو أحد الأنظمة الأولى التي انتشرت بين المطورين، وقد ظهر في أواخر الثمانينات من القرن الماضي. حاليًا، لم يتم تطوير هذا المنتج، ويرجع ذلك في المقام الأول إلى عدد من العيوب الرئيسية، مثل عدم القدرة على إعادة تسمية الملفات، والتخزين غير الفعال، والافتقار شبه الكامل للتحكم في السلامة.
التخريب (SVN) - تم إنشاء نظام التحكم في الإصدار ليحل محله CVS. SVNتم تطويره في عام 2004 وما زال قيد الاستخدام حتى اليوم. على الرغم من المزايا العديدة مقارنة ب CVSفي SVNومع ذلك، لا تزال هناك عيوب، مثل مشاكل إعادة التسمية، وعدم القدرة على حذف البيانات من المستودع، ومشاكل في تشغيل دمج الفروع، وما إلى ذلك. عمومًا SVNكانت (ولا تزال) خطوة مهمة إلى الأمام مقارنة بـ CVS.
أنظمة التحكم في الإصدار الموزع ( نظام التحكم في الإصدار الموزع، DVCS) يسمح لك بتخزين مستودع (نسخة منه) لكل مطور يعمل مع هذا النظام. في هذه الحالة، يمكنك تحديد مستودع مركزي (مشروط)، والذي سيتم إرسال التغييرات من المستودعات المحلية إليه، ومعه ستتم مزامنة هذه المستودعات المحلية. عند العمل مع مثل هذا النظام، يقوم المستخدمون بشكل دوري بمزامنة مستودعاتهم المحلية مع المستودع المركزي والعمل مباشرة مع نسختهم المحلية. بعد إجراء تغييرات كافية على النسخة المحلية، يتم إرسالها (التغييرات) إلى الخادم. في هذه الحالة، يتم تحديد الخادم في أغلب الأحيان بشكل مشروط، لأنه في الغالبية دفكسلا يوجد شيء اسمه "خادم مخصص بمستودع مركزي".
الميزة الكبيرة لهذا النهج هي استقلالية المطور عند العمل في المشروع، ومرونة النظام العام وزيادة الموثوقية بسبب حقيقة أن كل مطور لديه نسخة محلية من المستودع المركزي. أشهرهما دفكس- هذا شخص سخيفو زئبقي.
دعنا نبدء ب زئبقي، هذا النظام مجاني دفكس، والتي تم تصميمها بطريقة لا يوجد فيها مفهوم لمستودع مركزي للعمل مع هذا VCSيتم استخدام أداة مساعدة لوحدة التحكم (عادةً) زئبق. زئبقييتمتع بجميع إمكانيات نظام التحكم في الإصدار، مثل التفرع والدمج والمزامنة مع المستودعات الأخرى. يتم استخدام هذا المشروع ودعمه من قبل عدد كبير من المطورين الكبار، ومن بينهم موزيلا, مكتب مفتوح, OpenJDKواشياء أخرى عديدة. المنتج نفسه مكتوب فيه بايثونومتوفر على معظم أنظمة التشغيل الحديثة ( شبابيك, ماك, لينكس)، هناك أيضًا عدد كبير من أدوات واجهة المستخدم الرسومية المساعدة للعمل معها زئبقي. المنافس الرئيسي زئبقيفي سوق أنظمة التحكم في الإصدار الموزع شخص سخيفالذي فاز حتى الآن بسباق القيادة.
شخص سخيف- نظام التحكم بالإصدار الموزع الذي طوره لينوس تورفالدس للعمل على نواة نظام التشغيل لينكس. ومن المشاريع الكبيرة التي يستخدم فيها شخص سخيف، يمكننا اختيار الأساسية لينكس, كيو تي, ذكري المظهر. شخص سخيفمجانا وتوزيعها بموجب ترخيص جنو جي بي إل 2 و كذلك زئبقي، متاح على جميع أنظمة التشغيل تقريبًا. وفقا لقدراته الأساسية شخص سخيفمشابه ل زئبقي(و اخرين دفكس)، ولكن بفضل عدد من المزايا (السرعة العالية، القدرة على التكامل مع الآخرين VCS، واجهة سهلة الاستخدام) ومجتمع نشط للغاية تم تشكيله حول هذا النظام، شخص سخيفأصبحت الشركة الرائدة في السوق في أنظمة التحكم في الإصدارات الموزعة.تجدر الإشارة إلى أنه على الرغم من الشعبية الكبيرة لأنظمة مثل شخص سخيف، الشركات الكبيرة مثل جوجل، استخدمهم VCS.
كانت هذه محاضرة تمهيدية عن أنظمة التحكم في الإصدار. في ما يلي، كل العرض سوف يتعلق فقط شخص سخيف.
إذا كنت تفضل تعلم من محاضرات الفيديو، فإننا نوصي بدورة تدريبية رائعة حول شخص سخيفمن GeekBrains ، اذهب إلى وصلةوابحث عن الدورة التدريبية في قسم "الدورات التدريبية". “شخص سخيف. بداية سريعة". هو حر، ما عليك سوى التسجيل في الموقع. نوصي بإلقاء نظرة فاحصة على هذا المورد؛ فهو يحتوي على الكثير من الأشياء المثيرة للاهتمام!
هل لديك فكرة عمل جديدة رائعة تتعلق بتطوير البرمجيات؟هل تحتاج إلى تطوير حل معقد من الناحية التكنولوجية؟ أو هل لديك فريق كبير من المبرمجين الذين يعملون على نفس المهمة؟ ثم تذكر هذه الكلمات الثلاث:نظام التحكم في الإصدار .
, أو vcs- وهذا ما يمنع المشروع من الانهيار عندما يكون هناك الكثير من الأشخاص الذين يعملون عليه. يمكن لكل من المبرمجين والمديرين ومؤلفي النصوص العمل على قطعة خاصة بهم دون التدخل في بعضهم البعض ودون التسبب في أضرار لا يمكن تصحيحها.
إذا لم تكن على دراية بهذا المفهوم بعدأنظمة التحكم في الإصدار، ثم هنا كل شيء يظهر بوضوح شديد.
أو شاهد الفيديو من GitHub.
لقد قمنا بمقارنة العديد من الحلول الشائعة لتسهيل الاختيار عليك.
هذا موضوع تقني متخصص للغاية. لقد حاولنا أن نجعل مراجعتنا مفهومة للجميع. ولكن إذا لم تكن لديك خبرة في البرمجة، فتأكد من استشارة قسم التطوير لديك قبل اتخاذ القرارات.
أنظمة التحكم في الإصدار، بما في ذلك SVN (Subversion) وGit المشهورين، تم إنشاؤها في الأصل للسماح لفرق المطورين بالعمل في مشاريع تعاونية دون خلق أي ارتباك. في نظام التحكم، لا تحتاج إلى تتبع فروع التعليمات البرمجية بشكل مستقل ودراسة الملاحظات عليها. بدلاً من ذلك، يتم استخدام مستودع مركزي حيث يتم تنظيم كل شيء وتنظيمه. من السهل تحديث الملفات وإضافة التعليقات وحتى دمج فروع المشروع.
آراء حول ماذانظام التحكم في الإصدارويختلف الأفضل بشكل كبير، وهذا يؤدي إلى نقاش حاد بين المبرمجين. اختيار ودراسةأنظمة التحكم في الإصداربالنسبة لمشروعك، تذكر أن فوائد حل معين غالبًا ما تكون ذاتية. على سبيل المثال، التفضيلات الشخصية للمبرمج أو، على سبيل المثال، مؤشرات مثل الأداء، وقدرات المكونات الإضافية IDE، وما إلى ذلك.
والفرق الرئيسي بين أنظمة التحكم في الإصدار هو ما إذا كانت خادم عميل أو لامركزية (p2p). هل لديهم مستودع مركزي (خادم) يتم أخذ الكود منه وإرجاعه مع التغييرات التي تم إجراؤها. أو أنها نسخة في التخزين المحلي، يتم تحديثها من خلال أقرانها: شبكة أكثر لامركزية تستخدم للمزامنة، ومشاركة التصحيحات (مجموعات التغيير)، والحفاظ على التعليمات البرمجية الحالية.
ومن الجدير أيضًا أن نأخذ في الاعتبار السرعة والوظيفة والعتبة للدخول/إتقان شيء معينأنظمة التحكم. دعونا ننظر إلى الأكثر شيوعاأنظمة التحكم في الإصداروأسباب تفضيل المبرمجين لحلول معينة.
CVS ظهرت في الثمانينيات وما زالت تحظى بشعبية كبيرة بين مطوري المنتجات التجارية ومطوري المصادر المفتوحة.
CVS موزعة بموجب الشروطاتفاقية ترخيص GNU المفتوحة وتسمح لك بالحصول على الإصدار المطلوب من المشروع من الخادم - "تسجيل الخروج" (مقتطف) ، ثم أرسله مرة أخرى إلى الخادم، "تسجيل الوصول" (العودة) ،مع التغييرات التي تم إجراؤها.
في الأصل CVS تم إنشاؤه لتجنب تعارضات الإصدار. تم تزويد جميع المشاركين بأحدث إصدار من الكود للعمل معه. كان هذا هو الإصدار الأول من نظام التحكم. يحتاج المستخدم إلى إجراء تغييرات بسرعة على المستودع قبل أن يسبقه الآخرون إليه.
الآن CVS لديه دعم للعمل في المشاريع ذات فروع التعليمات البرمجية. وينتج عن ذلك العديد من خيارات المنتجات ذات الخصائص المختلفة التي يمكن دمجها لاحقًا.
خوادم CVS تعمل عادة تحت يونيكس، ولكن CVS -العملاء متوفرون أيضًا في أنظمة التشغيل الشائعة الأخرى. CVS - "ناضج" ، تم اختباره عبر الزمننظام التحكم في الإصدار. لا يزال نظامًا مفتوح المصدر، ولكن نادرًا ما تتم إضافة ميزات جديدة اليوم.
وفي الوقت نفسه، CVSNT هو إصدار منفصل في مشروع منفصل CVS لخوادم Windows - تعمل الآن على توسيع وظائفها بنشاط كبير.
SVN تم إنشاؤه كبديل CVS من أجل تصحيح أوجه القصور CVS وفي نفس الوقت ضمان التوافق العالي معها.
مثل CVS SVN هو نظام مجانيالتحكم في الإصدار مفتوح المصدر. والفرق الوحيد هو أنه يتم توزيعه بموجب ترخيص Apache، وليس بموجب ترخيص Apacheبموجب اتفاقية الترخيص العامة GNU.
للحفاظ على سلامة قاعدة البيانات، يستخدم SVN ما يسمى بالعمليات الذرية. عند إصدار إصدار جديد، يتم تطبيق كل الإصلاحات أو لا يتم تطبيق أي منها على المنتج النهائي. وبالتالي، فإن الكود محمي من التعديلات الجزئية الفوضوية التي لا تتفق مع بعضها البعض وتسبب الأخطاء.
لقد تحول العديد من المطورين إلىSVN، حيث ترث التكنولوجيا الجديدة ميزات أفضل CVS وفي الوقت نفسه توسيعها.
أثناء وجوده في CVS العمليات مع فروع التعليمات البرمجية باهظة الثمن ولا يتم توفيرها بواسطة بنية النظام؛ تم إنشاء SVN لهذا الغرض فقط. وهذا يعني بالنسبة للمشاريع الأكبر حجمًا التي تحتوي على تفرع التعليمات البرمجية والعديد من مجالات التطوير.
تشمل عيوب SVN السرعة البطيئة نسبيًا ونقص التحكم في الإصدار الموزع. وزعتالتحكم في الإصدار يستخدم نموذج نظير إلى نظير بدلاً من خادم مركزي لتخزين تحديثات كود البرنامج. وعلى الرغم من أن نموذج نظير إلى نظير يعمل بشكل أفضل في المشاريع مفتوحة المصدر، إلا أنه ليس مثاليًا في حالات أخرى. عيب النهج من جانب الخادم هو أنه عندما يتعطل الخادم، لا يتمكن العملاء من الوصول إلى التعليمات البرمجية.
تم إنشاء هذا النظام لإدارة تطوير Linux kernel ويستخدم أسلوبًا مختلفًا تمامًا عن CVS وSVN.
الاساسيات شخص سخيف تم وضع المفاهيم لتوزيعها بشكل أسرعنظام التحكم في الإصدار، على عكس القواعد والحلول المستخدمة في CVS . نظرًا لأنه تم تطوير Git بشكل أساسي لنظام التشغيل Linux، فهو يعمل بشكل أسرع على نظام التشغيل هذا.
يعمل Git أيضًا على أنظمة تشبه Unix (مثل MacOS)، ويتم استخدام حزمة mSysGit للتشغيل على نظام Windows الأساسي.
قد لا يكون رمز البرنامج متاحًا عند استخدام جهاز كمبيوتر بدون مستودع. توجد حلول لهذه المشكلة، ويعتقد بعض المطورين أن سرعة Git هي ثمن عادل مقابل هذا الإزعاج.
يحتوي Git أيضًا على العديد من الأدوات للتنقل في سجل التغييرات. تحتوي كل نسخة عمل من التعليمات البرمجية المصدر على تاريخ التطوير بأكمله، وهو أمر مفيد للغاية عند البرمجة دون اتصال بالإنترنت.
زئبقي تم إصداره في نفس وقت إصدار Git. هو نفسهوزعت نظام التحكم في الإصدار.
تم إنشاء Mercurial كبديل لـ Git لتطوير وحدات Linux kernel. ولكن بما أننا اخترنا Git، فقد تم استخدام Mercurial بشكل أقل. ومع ذلك، يعمل العديد من المطورين الرائدين مع هذا النظام، على سبيل المثالOpenOffice.org .
يختلف نظام التحكم في الإصدار الخاص بشركة Mercurial عن الأنظمة الأخرىأنظمة التحكم في الإصدارلأنه مكتوب بشكل أساسي بلغة بايثون (وليس لغة C). ومع ذلك، يتم تنفيذ بعض الأجزاء كوحدات ملحقة في لغة C.
نظرًا لأن النظام لا مركزي ومكتوب بلغة بايثون، فإن العديد من مبرمجي بايثون يميلون إلى التحول إلى ميركوريال.
لاحظ المستخدمون أن Mercurial يحتفظ ببعض خصائص SVN أثناء كونه نظامًا موزعًا، وبسبب هذا التشابه، فإنه يحتوي على حاجز أقل للدخول لأولئك الذين هم على دراية بـ SVN بالفعل. تعد وثائق Mercurial أيضًا أكثر اكتمالاً، مما يساعدك على التعود على الاختلافات بشكل أسرع.
أحد العيوب الهامة لـ Mercurial هو أنه، على عكس Git، لا يمكنه دمج فرعين رئيسيين، حيث أن Mercurial يستخدم نظام المكونات الإضافية بدلاً من دعم البرنامج النصي. يعد هذا أمرًا رائعًا لبعض المبرمجين، لكن الكثير منهم لا يريدون التخلي عن قوة Git.
أيّالتحكم في الإصدار يعمل بالنسبة لي?
في معظم الحالات، يستخدم المطورون CVS لأنه أكثر دراية بهم. إذا كان الفريق يعمل بالفعل في مشروع ما، فمن المحتمل نقل جميع التطورات إلى فريق آخرنظام التحكمبطريقة ما ليست ملهمة. إذا اضطروا إلى تغيير النظام، فمن المرجح أن يتحولوا إلى SVN.
لقد وصلت CVS بالفعل إلى حالة "التكنولوجيا الناضجة"، مما يعني أن الميزات والحلول الجديدة جذريًا لن تظهر فيها بعد الآن. يتم فقدان زخم هذه العادة مع انتقال الأشخاص إلى SVN. وهذا يعني أن نظام CVS أصبح شيئًا من الماضي تدريجيًا.
اليوم SVN يحمل راحة اليد بين خوادم الخادمأنظمة التحكم في الإصدار. ويشمل الفوائد CVS ويتفوق عليهم. إذا كنا نتحدث عن انتشار، فمن المرجح أن تواجه في كثير من الأحيان CVS أو SVN مقارنة بـ Git أو Mercurial. لذا، فإن المعرفة بتكنولوجيا خادم واحد، على الرغم من أنها ليست ضرورية، ستسهل عملية الانتقال.
نظرًا للاستخدام الواسع النطاق ونضج التكنولوجيا، تتمتع SVN بقاعدة معرفية كبيرة، مما يسهل على المستخدمين الحصول على المساعدة.
من الواضح أن Git أسرع من منافسيه. بالنسبة للمشاريع التي تم إنشاؤها للتوزيعأنظمة التحكم في الإصدار، وهذا تحسن واضح.
العيب الكبير في Git هو أنه من الصعب أحيانًا شرح الفروق الدقيقة في كيفية عمله.أنظمة التحكموهذا يؤدي إلى إبطاء سير العمل بينما يعتاد المبرمجون عليه. ومع ذلك، بمجرد التغلب على "عتبة الدخول"، ستزداد الإنتاجية وستؤدي سهولة إدارة فروع التعليمات البرمجية إلى سداد الوقت المستغرق بالكامل.
بالنسبة لأولئك الذين يكرهون Git (ولديها منتقدون بين المطورين)، فإن Mercurial هو حل وسط بين SVN وGit. يُستخدم هذا النظام في العديد من المشاريع الشهيرة كما أنه يتمتع بتوثيق جيد.
يتقدم إصدار Git المتوافق مع Windows أيضًا نحو سرعة إصدار Linux، لذلك قد يكون مناسبًا لك حتى إذا لم تقم بالتطوير على Linux.
لفهم أيهما أفضل بالنسبة لك، خذ في الاعتبار خصائص المشروع وفريقك. تحدث إلى المطورين!
إذا كان المشروع يتطلب شجرة كود مصدر واحدة سيتم العمل عليها بواسطة مجموعة صغيرة من المبرمجين، فإن SVN هو خيارك. إنها موثوقة ومصممة لمثل هذه الحالات فقط.
إذا كنت تطلق مشروعًا مفتوح المصدر سيعمل عليه العديد من المبرمجين في أوقات مختلفة أو إذا كنت تخطط لتحديث الكود باستمرار، فاختر Git. تعد إدارة السرعة وشجرة المصدر أفضل بكثير هنا مما كانت عليه في SVN.
إذا كنت على مفترق طرق أو لا تحب الطريقة التي يعمل بها SVN أو Git، فإن Mercurial هو الخيار المناسب لك.
جميع هذه الأنظمة تعمل بكامل طاقتها. وأيضا مجانا. يتم استخدامها لإنشاء البرامج ومواقع الويب وحتى أنظمة التشغيل التي تستخدمها وتعرفها.
بادئ ذي بدء، تقرر ما إذا كان واحدا أو آخر مناسبانظام التحكمإصدارات لعملك، وبعد ذلك - بنفس القدر من الأهمية - تأكد من أن هذا الاختيار لن يثير حفيظة المبرمجين.
إذا لم يسبق لك العمل مع SVN أو Git وليس لديك أي فكرة عن كيفية البدء، إذنحل الاستضافة مدمج مع واجهة المستخدم الرسوميةسوف تساعدك على التعود عليه بسرعة.
كما هو الحال في معظم الحالات، فإن الشيء الأكثر أهمية هو البدء في العمل، وبعد ذلك سيأتي الفهم. يشبه تشغيل نظام التحكم في الإصدار إلى حد كبير العمل مع الملفات الموجودة على الخادم باستخدام عميل FTP.
ملحوظة:هناك العديد من حلول الاستضافة لأنظمة التحكم في الإصدار، بما في ذلك فترة تجريبية مجانية. يمكنك إنشاء مستودعك الأول (مكان للتعاون في ملفات التعليمات البرمجية) على أساسه مجانًا. فيما يلي بعض هذه الخدمات:
بعد إنشاء الحساب، تحتاج إلى إنشاء مستودع - لكل منصة على حدة. عادة ما يبدو مثل هذا:
لذلك تم إنشاء المستودع. الآن نحن بحاجة إلى أن يتم عرض كل شيء فيه ببساطة ووضوح. للقيام بذلك سوف تحتاج إلى واجهة المستخدم الرسومية.
—برنامج مناسب للعمل معأنظمة التحكم في الإصدارعلى نظام التشغيل Microsoft Windows وربما يكون أفضل عميل متاح لـ Apache Subversion. يتم تنفيذ TortoiseSVN كملحق لـ Windows Shell، مما يجعل من السهل الاندماج فيه browser. وهو أيضًا برنامج مفتوح المصدر مع 34 حزمة لغة متاحة
سمارتجيت
– عميل Git الرسومي (مفتوح المصدر موزعنظام التحكم في الإصدار). يعمل على أنظمة التشغيل Windows وMac OS X وLinux.تكلفة الترخيص - 39 دولارًا
لذلك، تم اختيار العميل. أنت الآن بحاجة إلى إنشاء مستودع لنظام التحكم. بحاجة للدخولعنوان URL للمستودع الخاص بك واسم المستخدم وكلمة المرور.
عادةً ما يبدو عنوان URL كما يلي:https://svn
بعد إجراء التغييرات على الملفات، انقر فوق زر تسجيل الوصول الموجود على شريط الأدوات لحفظها. يمكنك مراجعة التغييرات وإضافة التعليقات عليها - وهذه فكرة جيدة جدًا، لأنك ستعرف في المستقبل بالضبط ما عملت عليه، وما هي التغييرات التي تم إجراؤها، وستبقي المشاركين الآخرين في المشروع على اطلاع.
يجب أن يوفر عميلك أيضًا القدرة على بدء العمل مع المراجعات في أي وقت عن طريق فتح سجل المراجعة أو سجل التغيير - ثم، إذا لزم الأمر، يمكنك "الرجوع" إلى الإصدار السابق لكل ملف على حدة. الآن بعد أن أصبحت على دراية بالمفاهيم الأساسية والوثائق