كلام عن CVS

السلام عليكم

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

دعوكم من المرأة والحب
ودعونا نتكلم عن موضوع اليوم
اليوم سأكلمكم عن نظام التحكم بالإصدارات control version system (CVS)
وستكون أجندتي في هذا الموضوع على النحو التالي
المشكلة التي كان CVS حلاً لها
لماذا نحتاج CVS
ماهو CVS
أنواع CVS
المصطلحات الشائعة في CVS
بعض الأفكار التي يمكن الاستفادة من CVS فيها
بالطبع البعض يسأل لماذا أضع أجندة اليوم
الموضوع لا يتعدى أني أريد أن أبقى في السياق فكما تعرفون أنا أحب الاستطراد وهذا قد ينقل الموضوع من البرمجة إلى أي شيء آخر 🙂
دعونا نبدأ

1- المشكلة:
أ- عندما تعمل على برنامج لوحدك تستطيع أن تعدل أي ملف في أي وقت
بينما عندما تعمل في فريق الموضوع ليس بهذه البساطة
ستحتاج إلى أن توجد الملفات في مكان مشترك ما بين المبرمجين
وكل واحد منهم يريد أن يحفظ تعدليلاته وقد يحصل أن مبرمجين أو أكثر يعدلون على نفس الملف
فما الذي سيحدث؟
سيحدث أحد أمرين إما أننا سنحصل على ملف معطوب corrupt file
أو أن أحد المبرمجين هو من ستحفظ تعديلاته والباقيين ستذهب تعديلاتهم أدراج الرياح
ب- عندما يعمل المبرمج على مشروع لوحده فإنه ملم بجميع نواحي المشروع
يعرف أنه عندما يعدل في الفئة الفلانية أو في الدالة العلانية ما صحة تعديله
وهل هناك أي تعارضات بينه وبين الشيفرة الأخرى
ماذا عن العمل في فريق؟
فعلاً سؤال مهم ماذا لو كانت مؤسستك تحتوي على فريق من المبرمجين يعملون على نفس البرنامج
كل يعدل على جزء مختلف منه وفي نفس الوقت هل تعتقد أن الشيفرة ستبقى سليمة من الأخطاء
توقعاتي أنك ستجد أخطاء قاتلة دائماً

من النقطتين السابقتين نستطيع الانتقال إلى العنوان الثاني في أجندتنا
2- لماذا نحتاج CVS؟
ببساطة نحتاج CVS لضمان حالة الملفات الصحية (كون الملف غير معطوب)
وضمان سلامة المنطق في الشيفرة التي يكتبها الفريق (سنرى كيف يفيدنا CVS في تحقيق هذه النقطة)

3- ما هو CVS؟
CVS هو أداة أو برنامج وظيفتها أن تتحكم في التعديلات على الشيفرة
بحيث تضمن بقاءها سليمة بشكل فيزيائي (السلامة من العطب)
وتسهل على المبرمجين عملية التأكد من سلامة الشيفرة المنطقية

أما عن كيف تقوم بذلك فللناس فيما يعشقون مذاهب 🙂
وهذا يضعنا على أول الطريق مع الجزء التالي في أجندتنا

4-أنواع CVS:
قبل أن أبدأ الكلام أحب أن أذكر أني أقصد CVS models
(فكرت في إيجاد ترجمة أفضل لـ model لكني لم أجد
لذا لو كان لديكم واحدة فالرجاء إبلاغي بها على الإيميل أو هنا)
هناك نوعين أساسيين من CVS
النوع الأول
احجز ثم عدل ثم فك الحجز lock-modify-unlock
وهذا النوع يقوم فيه المبرمج بحجز الملف فلا يعدل عليه أحد سواه
ثم يقوم بالتعديل على الملف
بعد أن ينتهي من التعديل على الملف يقوم بفك الحجز
هنا يستطيع الآخرون أن يقوموا بالتعديل على الملف
بالطبع سترفض تعديلاتك على ملف ما لم تكن حاجزاً للملف
مع تجربة هذا النوع ستلاحظ أن هناك مشاكل كبيرة تواجهك
من أهمها
أ- واحد حجز ملف ثم أخذ إجازة بالطبع لن تستطيع التعديل على الملف
ب- أحياناً يكون المبرمجين يعملون على نفس الفئة class لكنهم يعملون على وحدات أصغر مثل الدوال
ولا اعتمادية بين عملهم فلماذا ينتظر أحدهم أن ينتهي الآخر حتى يستطيع البدء
لماذا لا يعملون على التوازي؟
من مزايا هذا النظام
لا يحتاج إلى التأكد من أنه لم يتم تعديل الملف أثناء عملك عليه
النوع الثاني
عدل اعتمد modify-commit
في هذا النوع يكون لكل مستخدم نسخة خاصة به من الملف (تسمى هذه النسخة working copy)
يستطيع أن يعدل عليها كما يشاء
ثم يقوم باعتماد التعديل بعد أن ينتهي منه
ماذا لو كان هناك من يعمل على نفس الملف وقام باعتماد تعديلاته قبلك
فعلياً سيصبح الملف الذي تعمل عليه قديماً نوعاً ما
لذا عليك أن تحدث الملف حتى تضمن أنك لم تفوت أي تعديلات قام بها الآخرين من شأنها أن تفسد تعديلك بطرقة ما
عيب هذا النوع أنه يحمل المبرمج عبء متابعة الآخرين والتأكد من عدم إجراؤهم لتعديلات على الملف
مما يعني وقت إضافي على المبرمج قد يعيق مسيرة العمل
مزايا هذا النوع
أ- لا تخشى من غياب أحد أفراد الفريق فأنت قادر على العمل بدونه
ب- يمكن لأكثر من مبرمج أن يعملوا على نفس الملف في نفس الوقت
ملاحظة هناك بعض الـ CVS توفر النوعين مع بعض مثل SVN لكنها تعتمد النوع الثاني بشكل أساسي
المصطلحات الشائعة في CVS
1- المستودع Repository
وهو المكان الذي يتم تخزين الشيفرة وتعديلاتها المختلفة
ويعد كل مستودع مسؤول عن إدارة الشيفرة الخاص بتطبيق واحد (في بعض الأحيان مجموعة من التطبيقات المرتبطة مع بعضها البعض)
وهو الوحدة التي يستطيع أن يراها المستخدم من الخادم
2- نسخة المستخدم working copy
وهي النسخة الخاصة بالمستخدم وفي الغالب تحتوي على تحديثات updates لم يتم نقلها إلى مستودع الشيفرة Repository
3- اعتماد commit or check in
هي العملية التي يتم فيها نقل التعديلات الخاصة بالمستخدم من نسخة المستخدم working copy إلى مستودع الشيفرة Repository
نلاحظ في هذه العملية أن المستودع لن يقبل منك التحديثات ما لم تكن نسختك مبنية على آخر نسخة موجودة على الخادم
4- تحديث update
وهي العملية التي يقوم بها المستخدم عندما يكون هناك اختلاف بين نسخة المستخدم الخاصة به والنسخة الأخيرة من الشيفرة الموجودة في المستودع Repository
نلاحظ في هذه العملية لو كان هناك اختلاف بين نسخة المستخدم وبين الخادم فسيقوم الخادم بإعطاءك ثلاثة ملفات ملف يحتوي على النسخة التي بني عليها تعديلك
وملف يحتوي على آخر نسخة موجودة في المستودع وملف آخر يحتوي على الشكل الحالي للملف
5-حل النزاعات resolve conflicting
وهي العملية التي يقوم بها المستخدم لحل اختلاف الشيفرة بين نسخته والنسخة الأخيرة في المستودع
والهدف الأساسي من هذه العملية الحفاظ على المنطقية في الشيفرة بدون أية مشاكل
لهذا فيتحتم أن يقوم بهذه العملية إنسان وليس الحاسوب
6- check out السحب
وهي عملية إنشاء نسخة مستخدم خاصة بك ويتم في هذه العملية سحب آخر نسخة من الشيفرة من المستودع
وهناك مصطلحات أخرى يمكنك الإطلاع عليها من المرجع 1 (المرجع رقم 1 رائع بكل المقاييس وأرشحه للقراءة لكل من هو مهتم)

أفكار يمكن الاستفادة من CVS فيها
1- المبرمج في مشروع واحد يستفيد من CVS كتاريخ للشيفرة الخاصة به
2- المبرمج في مشروع واحد يستطيع أن يتذكر متى كانت آخر نسخة مضمونة من الشيفرة
فيستطيع الرجوع إليها بشكل مؤقت حتى يكتشف المشكلة الحاصلة في شيفرته
3- مجموعة من المبرمجين في مشروع واحد يعرف كل واحد ما سبب التعديل ومن قام به
4- يمكن الرجوع إلى آخر نسخة معتبرة على أساس أنها مختبرة tested باستخدام النسخ المعلم tagged versions
5- يمكن تقسيم البرنامج إلى أجزاء modules والعمل على كل جزء على حدة ثم ضمه إلى المشروع الرئيسي في حال التأكد من صحة المشروع باستخدام التقسيم branching والدمج merging
6- غير المبرمجين يمكنهم استخدام الـ CVS في التعديل على ملفاتهم المختلفة والرجوع إلى أي تعديل يريدون
(بالمناسبة كتبت هذه المقالة على CVS يسمى SVN)

هناك الكثير من الكلام على CVS وفوائدها وآلية العمل عليها
لكني مللت من الكلام
على العموم يمكنك المشاركة معي في تكملة المقال بملاحظاتكم و أسئلتكم
(لدي معلومات كافية بإذن الله للإجابة عليها بالطبع)

المراجع:
مقالة بعنوان A Visual Guide to Version Control

Tags: , , , , , , , , , , ,

15 تعليق to “كلام عن CVS”

  1. يقول Dev:Moh-Taha:

    جميل ما قدمت اخي علاء

    لكن هل يمكن اعطاء امثلة على بعض برامج ال cvs
    لكي تتضح الفكرة أكثر

    وشكرا

  2. يقول م. أنس حمو:

    الله يخليلنا خالتو مايكروسوفت عاملالنا سيرفر كامل للموضوع هاد وما في اي فريق برمجي بشتغل ع احد لغات الدوت نت الا وبكون هاد السيرفر العنصر الاول في الفريق

    اسم السيرفر TFS – Team Foundatuion Server

    http://en.wikipedia.org/wiki/Team_Foundation_Server

  3. يقول admin:

    أخي Dev:Moh-Taha
    هناك عدة أمثلة أشهرها CVS (ولا تستغرب فهو برنامج أيضاً) وهناك SVN وأنا أرشح الأخير

    أخ أنس
    منور الميناء يا مايكروسوفت باشا 🙂
    والله يا عمي مايكروسوفت هما الملوك في التسهيل والحاجات هادي
    ويبدولي أنه في اشوية خصائص حلوين
    لكن هل هو بفلوس ولا لأ
    لأني على حسب ما فهمت Source control جزء من الخادم مش بس SC

    تحياتي

  4. يقول م. أنس حمو:

    النور نورك يا قبطان

    لا طبعا هو في حاجة ببلاش من ورا مايكروسوفت بس عادة معظم شركات البرمجة بتكون عاملة Partnership مع ميكروسوفت فبتلاقي الـ TFS بعطونا اياه ببلاش

    مش بس الـ TFS شغلات كتير كمان بدونا اياها ببلاش زي :

    SQL Server
    Windows Server
    BizTalk server
    Windows 7
    Visual Studio

    تقريبا معظم منتجاتهم بتكون متاحة النا ببلاش

  5. يقول admin:

    اهااااااااااا
    أنا توقعت هيك برضو
    فشي اشي بيجي ببلاش
    لازم اله سعره 🙂
    على كل بيضل وظيفتنا كمهندسين نحسبها بحيث نوفر على نفسنا وعلى مؤسساتنا الوقت والمال 😆

    تحياتي

  6. يقول مهدي:

    جميل جدا.. لكن برنامج ال CVS برنامج قديم والمعظم استبدله ب SVN. حتى هذه الأخيره بدأ المطورون بتركها والاتجاه الى GIT. هي أداه رائعه و موزعه تغير مفهوم ال CVS بشكل عام وأنصح الجميع بتجربتها لكن عليكم بالصبر في البدايه..

  7. يقول admin:

    مهدي أنا قصدت بـ CVS هنا العائلة كلها
    اختصار لـ control version system
    يبدو أني أخطأت في الاختصار
    هل تعرف ما هو الاسم الصحيح؟ أخبرني من فضلك؟
    أنا فعلياً أعمل على SVN
    لاحظ هذا المقطع من المقالة
    (بالمناسبة كتبت هذه المقالة على CVS يسمى SVN)
    بالنسبة لـ GIT ماهو الجديد فيه
    هل يمكنك أن تطلعنا عليه ببساطة قدر الإمكان

    تحياتي

  8. يقول مهدي:

    الاختصار صحيح, لكني ظننتك تشرح برنامج CVS.

    بالنسبه ل GIT, فهو برنامج موزع يتيح لك اداره الكود وهو يقدم لك كل ما يقدمه SVN بالاضافه لميزات اضافيه:
    1. بسبب ان النظام موزع فان ذلك يعني انك يمكن ان تعمل دون الحاجه الى خادم طول الوقت ومثال ذلك فانه يمكنك عمل commit لعملك على جهازك دون وجود انترنت ثم رفعها على السيرفر باستخدام push عند توفر انترنت.

    مثال أخر يمكنك الاطلاع على جميع ال Logs دون الاحاجه للاتصال بالخادم حيث ان النسخه المحليه على جهازك تحتوي نسخه من كامل ال repository ومن ضمنها ال Logs.

    مثال أخر, ماذا لو ان الخادم تم تدميره بالكامل ( لا سمح الله ) في حاله SVN فان كل شخص عنده نسخه من أخر ملفات المشروع وجميع الملفات السابق وال Logs لا توجد الى على الخادم وبالتالي لن تستطيع ارجاع الى نسخه أخيره من المشروع بينما في GIT فان كل شخص عنده نسخه كامله من ال repository وبالتالي يمكننا أخذ اي نسخه وارجاعها الى الخادم ولن نخسر سوى بضع ساعات من العمل.

    2. أهم خاصيه في GIT هي عمليه ال branching وهي تتم ب SVN عن طريق أخذ نسخه كامله من المشروع الى مكان أخر ومن ثم العمل عليه بينما في GIT فان العمليه سوف تتم لحظيا بانشاء مؤشر جديد يؤشر على الفرع الجديد دون نسخ المشروع مره أخرى. هذا باختصار لأني لم أفهم ال brnaching بشكل جيد في GIT حتى الان.

  9. يقول admin:

    لم يتضح لي موضوع الـ commit
    في اعتقادي أن هذه العملية لا يمكن اعتبارها commit حقيقي
    لأن الآخرين لم يستطيعوا رأية التحديث عند طلب الملف

    أعتقد أن الموضوع حفظ الـ log على كل جهاز
    له عيوب منها:
    1- لو تم سرقة الجهاز فالسارق لديه كل شيء (بما في ذلك تاريخ البرنامج كله) وهذا يساعده بشكل أكبر على فهم البرنامج وآلية التعديل عليه
    2- المشرايع الكبيرة بعض الشيء قد يعاني مستخدموها من الحجم

    على كل أنا أسمع عن بعض الأدوات التي تقوم بتوزيع الكود على أكثر من خادم وليس خادم وحيد وأعتقد أنها جيدة وقد تفيد البعض 🙂 فهل GIt أحدها؟
    في انتظارك أخ مهدي

    تحياتي

  10. يقول مهدي:

    المشكله مشكله تعود على المصطلحات لا أكثر, في GIT ال commit لا تعني ارسال التغييرات للأخرين بل يعوضها في ذلك الأمر Push.

    أما بالنسبه للحجم فهو اعتقاد خاطيء، GIT صممت بطريقه رائعه لتوفر الحجم لا أن تزيده وبالتالي حجم ال Repository أقل منها في SVN عموما اعلم ان Android و Linux Kernel يستخدمون GIT مع ملاحظه أن كود Android وصل حجمه الى 2GB وما زال يدار بطريقه رائعه.

    التوزيع في GIT ايس على أكثر من خادم انما على أجهزه المستخدمين..

  11. يقول admin:

    كنت سأقول لك أنا أتخوف من توزيع الشيفرة على أكثر من خادم
    أما والموضوع أصبح على أكثر من جهاز فأنا أموت خوفاً من استخدام GIT في مشاريع تجارية
    لا أعلم إلى أي حد يضمن GIT موضوع Transaction وإدارة تخزين الشيفرة
    على كل حتى الآن لا وجود لشركات تجارية قررت دعمه في منتجاتها
    سؤأجل تجربته حتى أجل غير مسمى 🙂

    تحياتي

  12. موضوع جميل جدا يا علاء….. كافي ووافي ما شاء الله..
    بالنسبة للنوع الأول……… فمن رأي الشخصي … أنه الأفضل… لأن موضوع ال merge من أسوأ ماواجهت في عالم الحواسب ……

    أيضا تقسم الأدوات هذه من حيث التوزيعيه من عدمه….. فمثلا GIT موزع بالأصل … بعكس ClearCase أو AccuRev …….
    فب GIT (اعتقد) أن كل شخص يقوم بعمله بعيدا عن الخادم و في النهايه يتم وضع الأكواد على الخادم مما يضطر إلى وجود عملية ال merge ….

  13. يقول admin:

    فعلاً عملية الدمج عملية كبيرة
    لكن في كثير من الأحيان لا يمكن انتظار كل مبرمج حتى ينتهي من عمله
    يمكنني ببساطة أن أؤكد لك أن لا وجود للأفضل على الإطلاق
    وإنما يوجد ما هو أفضل لحالة معينة وأسوأ في حالة أخرى

    شكراً على التقسيم الجديد فهذا إثراء أطمح لو قام به كل قرائي (إن كان هناك قراء أصلاً 🙂 )

    تحياتي

  14. […] على إدارته وتقسيم ملفاته كتبت مقالة عنه مسبقاً بعنوان كلام في CVS وحيث أني المسؤول عن إدارة SVN فتوجب علي أن اقترح هيكلية […]

  15. […] tortoisesvn لفهم أكبر لموضوع SVN اطلع على المواضيع التالية http://modonat-alaa.freehostia.com/2010/07/%d9%83%d9%84%d8%a7%d9%85-%d8%b9%d9%86-cvs/ […]

Leave a Reply