RSS

نظام CVS لإدارة الشيفرات المصدرية

12 ماي

إن كنت ممن إعتادوا على تنزيل البرامج الحرة والمفتوحة المصدر من هنا أو هناك على شبكة الويب، فلا بد أنك قد تعرفت إلى موقع Sourceforge.net والذي يعد واحدا من أكبر مكانز البرمجيات المفتوحة المصدر وأكثرها مصداقية، وهو الذي يحفظ الشيفرة البرمجية للآلاف من تلك المشاريع (حاليا هناك أكثر من 100,000 مشروع منشور ضمن هذا الموقع وأكثر من 1,000,000 مطور مسجل)، وتندرج تلك المشاريع تحت العشرات من الفئات والأنواع ولغات البرمجة وبيئات العمل وأنظمة التشغيل.

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

لكن الميزة الأكثر جوهرية وأهمية خصوصا لفريق العمل الذي يقوم بتطوير ذلك المشروع أو البرمجية هو توفير مخدم (CVS (Concurrent Versioning System، وهو عبارة عن نظام مفتوح المصدر مخصص للتحكم بالإصدارات، بمعنى مراقبة كافة التغييرات التي تطرأ على ملفات الشيفرة المصدرية للبرمجية خلال مراحل تطوير المشروع، ويتيح الفرصة للعديد من المطورين للعمل معا حتى وإن كانوا متواجدين في مواقع متباعدة مكانيا أو مختلفة من حيث الفوارق الزمنية.

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

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


إن توفر برمجية زبون CVS هو أمر ضروري للمطور حتى يكون قادرا على التعامل مع مخدم CVS سواء ذلك الموجود على موقع Sourceforge.net أو غيره من المواقع التي توفر مثل هذه الخدمة، أو حتى على شبكتك الداخلية في حال توفر مخدم CVS محلي. يعتبر برنامج TortoiseCVS واحدا من أشهر برامج زبون CVS وأكثرها بساطة وسهولة وتفاعلية في بيئة نظام التشغيل Windows، إضافة إلى كونه مجاني، حيث يمكنك تحميله من العنوان التالي:

http://www.tortoisecvs.org/download.shtml

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

فيما يلي سوف نستعرض سيناريو متكامل ليوم عمل نتفاعل خلاله مع مختلف وظائف مخدم CVS الشائعة. عند بدء العمل، عليك الحصول على نسخة كاملة من الشيفرة المصدرية للمشروع (checkout) على حاسوبك الخاص من مخدم CVS (أو ما يدعى بصندوق الرمل الخاص بك). بعد ذلك تقوم ببساطة وبإسلوبك المعتاد وأدواتك الخاصة بالعمل على الملفات التي ترغب بتعديلها، أو تضيف ملفات جديدة أو حتى تحذف أخرى موجودة، وبعد الإنتهاء من تنفيذ تعديلاتك وإختبار صحتها، عليك إعادتها إلى المكنز من جديد باستخدام تعليمة الإيداع commit لتنفيذ عملية check in. فإن صادف وأن قام أحدهم بتعديل ذات الملف الذي عملت عليه، حينها ستفشل عملية الإيداع commit التي تحاول تنفيذها، حينها يتوجب عليك تنفيذ تعليمة تحديث update لكامل الشيفرة المصدرية التي لديك في صندوق الرمل بالاعتماد على الإصدارة الأحدث التي باتت متوفرة على مكنز مخدم CVS، حيث تقوم هذه التعليمة بدمج تعديلات المطورين الآخرين بشكل آلي في نسختك من ملفات الشيفرة المصدرية ضمن صندوق الرمل الخاص بك.

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

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

للحصول على نسختك المحلية من الشيفرة المصدرية لملفات المشروع من مخدم CVS للمرة الأولى (وهو ما يعرف بعملية الاستخراج check out)، وبفرض أنك قمت بتنصيب برنامج TortoiseCVS على حاسوبك الشخصي، حينها يكون كل ما عليك القيام به النقر بالزر الأيمن للفأرة ضمن المجلد الذي تريد حفظ الملفات المستخرجة ضمنه، بعدها إختر “CVS checkout…” من القائمة التي تظهر لك. سيؤدي ذلك إلى الحصول على صندوق الحوار الخاص بعملية الاستخراج (إنظر الشكل 2)

يتضمن صندوق الحوار الخاص بعملية الاستخراج مجموعة الحقول التالية:

  • Protocol: ويحدد البروتوكول الذي سيتم استخدامه عند مخاطبة مخدم CVS
  • Server: وهو عنوان الحاسوب الذي يستضيف مخدم CVS
  • Repository Directory: وهو موقع ملفات المشروع الذي تعمل عليه ضمن مكنز المخدم
  • User name: وهو اسم المستخدم لحسابك الخاص على المخدم والذي ستلج بسماحياته
  • Module: وهو اسم الكينونة التي تريد العمل عليها ضمن هذا المشروع (هذا الاسم حساس لحالة الأحرف)

بالنهاية يتم توليد سلسلة نصية تدعى CVSROOT مؤلفة من كافة المعلومات الواردة أعلاه وتستخدم للإتصال بمخدم CVS.

حتى تستطيع إستخراج الشيفرة المصدرية لأي مشروع عليك بداية أن تحصل على هذه المعلومات، ففي موقع Sourceforge.net على سبيل المثال تجد تلك المعلومات ضمن بند CVS من قائمة Code المنسدلة كما هو موضح بالشكل 3. أما إن كنت لا تعلم ما هو اسم كينونة Module فكل ما عليك القيام به هو النقر على زر “Fetch list…” بعد إدخال كافة معلومات الحقول الأخرى، ليقوم برنامج TortoiseCVS بطلب كلمة السر الخاصة باسم المستخدم الذي حددته، وليقوم بعد ذلك بجلب قائمة بكافة الكينونات Modules المتوفرة في هذا المشروع البرمجي لتختار منها ما تريد.

يميز موقع Sourceforge.net ما بين الشخص الذي يحاول الحصول على النسخة المصدرية من مكنز CVS، وبالتالي هو بحاجة إلى سماحيات القراءة فقط وتنفيذ عملية check out، وهذا ما يكون متاحا من خلال بروتوكول Password Server ( :pserver: ) باسم المستخدم anonymous ودون الحاجة إلى كلمة سر. للقيام بتجربة عملية يمكنك استخراج الشيفرة المصدرية لمشروع PHP واللغة العربية الذي بات منشورا الآن على موقع Sourceforge.net باستخدام المعلومات التالية:

  • Server: ar-php.cvs.sourceforge.net
  • Repository Directory: /cvsroot/ar-php

أما إن كنت ترغب في الحصول على تلك الشيفرة المصدرية بهدف إجراء أي تعديلات عليها ومن ثم إيداعها مجددا ضمن مكنز Sourceforge.net، حينها يجب عليك أن تقوم بتسجيل حساب خاص بك ضمن موقع Sourcseforge.net، ومن ثم تطلب الإنضمام إلى أعضاء تطوير المشروع الذي ترغب المساهمة فيه من خلال مراسلة مدير ذلك المشروع وإيضاح خبراتك ومهاراتك وما ترغب في إضافته إلى المشروع، فإن كان الجواب بالإيجاب فسيقوم مدير المشروع بإضافة إسمك إلى لائحة المطورين الذين يسمح لهم بالتعديل على الشيفرة المصدرية للبرنامج. في تلك الحالة عليك استخدام Secure Shell ( :ext: ) كبروتوكول إتصال، بالإضافة إلى اسم المستخدم وكلمة السر الخاصين بحسابك على موقع Sourceforge.net.

بعد تنفيذ عملية الاستخراج ستحصل على مجموعة من الملفات والمجلدات التي وسمت أيقوناتها عن طريق برنامج TortoiseCVS برموز وألوان ذات دلالة، ولتلك الوسوم المعاني التالية:

  • الوسم الأخضر يشير إلى أن الملف أو المجلد مدرج ضمن خدمة CVS
  • الوسم البرتقالي يشير إلى أن الملف قد تم تعديله
  • الوسم الأزرق ذي علامة الاستفهام يشير إلى أن الملف أو المجلد غير مدرج ضمن مكنز CVS
  • الوسم الأرجواني يشير إلى أن التعديلات التي أضفتها تتضارب مع تعديلات شخص آخر

الشكل 4 يوضح نموذجا عما يمكن أن تراه من ملفات ومجلدات موسومة في صندوق الرمل الخاص بك:

قد تحتاج بين الحين والآخر إلى دمج التعديلات التي قام بها الآخرون ضمن النسخة الخاصة بك في صندوق الرمل، تدعى هذه العملية بالتحديث update. يمكن إجراء عملية التحديث على ملف وحيد، أو مجموعة مختارة من الملفات، أو حتى على مجلدات بكاملها، مع ما تتضمنه من ملفات ومجلدات فرعية داخلها. لإجراء عملية التحديث، عليك إختيار الملفات أو المجلدات التي تريد تحديثها، ومن ثم النقر على الزر الأيمن للفأرة، بعدها إختر البند “CVS Update” من القائمة، وستحصل حين ذلك على نافذة تظهر تقدم عملية التحديث.

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

  1. قبل الإيداع، عليك القيام بعملية تحديث لتتأكد من عدم وجود أي تعارضات.
  2. إختر المجلد أو الملفات التي تريد إيداعها.
  3. إنقر زر الفأرة الأيمن على ما تم إختياره، ومن ثم إختر البند “CVS Commit…” من القائمة.
  4. في صندوق حوار اإيداع الذي يظهر لك، قم بإدخال ملخص حول ما قمت به من تعديلات ليتم إضافتها إلى السجل.
  5. يمكن إستبعاد بعض الملفات من عملية الإيداع من خلال تحرير صناديق الإختيار الخاص بتلك الملفات.
  6. إنقر على زر “OK” لمتابعة عملية الإيداع.

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

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

<<<<<<< filename
Your changes
=======
Code merged from repository
>>>>>>> revision

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

كما سبق وأن ذكرنا، فإن عملية الإيداع لا تقوم بإضافة الملفات أو المجلدات الجديدة إلى المكنز بشكل تلقائي، وستلاحظ أن تلك الملفات الجديدة ستظهر موسومة باللون الأزرق مع علامة إستفهام صغيرة على طرفها. لإضافة تلك الملفات إلى مكنز CVS عليك بداية إختيار مجموعة الملفات والمجلدات التي ترغب في إضافتها، ومن ثم إنقر عليها بالزر الأيمن للفأرة واختر بند “CVS Add Contents…” من القائمة.

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

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

عند وضع نظام CVS في الاستثمار، يصبح بمقدورك على سبيل المثال استعراض كافة التعديلات التي أجريت على أحد الملفات من خلال إختيار البند “Annotate…” من قائمة “CVS” الفرعية التي تظهر عند النقر بالزر الأيمن للفأرة على الملف المعني، تتضمن هذه المعلومات من ومتى وأين قام كل مطور بإضافة تعديلاته، كما يظهر الشكل 6. كذلك يتيح نظام CVS إستعادة هيئة الملف أو المشروع كما كانت خلال أي فترة سابقة من فترات تطويره لتدارك خطأ ما أو لاستعادة معلومة معينة.

بطريقة مشابهة، إن أردت حذف أي ملفات أو مجلدات من المشروع الذي تعمل عليه، فعليك بداية إختيار تلك الملفات أو المجلدات ومن ثم النقر على الزر الأيمن للفأرة وإختيار البند “Remove” من قائمة “CVS” الفرعية التي تظهر، حيث سيحذف الملف من نسخة صندوق الرمل المحلية، وتتم جدولة عملية الحذف ضمن المكنز، لكنها لن تتم فعليا على المخدم حتى تقوم بأول عملية إيداع commit تالية. مما يجدر ملاحظته هنا أن أي مجلد يخلو من الملفات ضمنه سيتم حذفه تلقائيا من مكنز CVS عند أول عملية إيداع، لذا عليك إضافة ملف وحيد على الأقل (ولو كان فارغا) ضمن اي مجلد تريد الإبقاء عليه.

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

أخيرا قد تحتاج عقب يوم عمل عسير إلى إلغاء كل ما قمت به من تعديلات والعودة بالشيفرة المصدرية ضمن صندوق الرمل الخاص بك إلى سابق عهدها مع إلغاء كل ما قمت به من تعديلات لم تحقق ما كنت تصبو إليه. للقيام بذلك إختر الأمر “Update Special…” من قائمة “CVS” الفرعية التي تظهر عند النقر بالزر الأيمن للفأرة على ملف أو مجلد أو مجموعة من الملفات والمجلدات، حينها قم باختيار “clean copy” من صندوق الحوار الذي حصلت عليه لتعود تلك الملفات والمجلدات إلى سابق عهدها.

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

 
 

الأوسمة: , ,

1 responses to “نظام CVS لإدارة الشيفرات المصدرية

  1. خالد الشمعة

    13 جويلية 2010 at 7:59 صباحًا

    هنالك أيضا مقالة جميلة كتبها الصديق محمد شاطر أنصح الجميع بالإطلاع عليها:

    http://www.fez-soft.net/archives/283

     

أضف تعليق