السبت، 17 مارس 2012

ماذا يعني ال Version Control System) VCS)


هو نظام يقوم بعملية إدارة التغيرات التي يقوم بها أعضاء فريق العمل على ملفات مشروع ما.
عندما تعمل مع مجموعة أشخاص ضمن فريق عمل، قد تصاب بالإحباط من استمرار تبادل ملفات المشروع بين أعضاء الفريق إما عن طريق البريد الالكتروني أو عن طريق مواقع رفع الملفات أو غيرها من الطرق.
clip image002 thumb استخدم برامج ال VCS لإدارة عمل فريقك في مشروعك القادم
يأتي هذا النظام كطريقة ممتازة لحل مشكلة مشاركة الملفات بين العاملين على المشروع حيث تتجلى أهميته في إمكانية وجود عدد لا نهائي من المبرمجين مثلا ًعلى نفس المشروع من غير الاضطرار إلى إرسال الملفات فيما بينهم واستقبالها بالطريقة التقليدية.
ما فائدته؟
١- القدرة على عمل نسخة احتياطية للمشروع واستعادة الملفات كما كانت قبل إجراء التغييرات في أي تاريخ سابق.
٢- إذا قمت بعمل تغييرات ثم اكتشفت أنها قد احدثت بعض المشاكل، تستطيع بكل سهولة الرجوع الى آخر نسخة من المشروع كانت تعمل بشكل جيد.
٣- القدرة على التزامن، بحيث يستطيع فريق العمل مشاركة الملفات فيما بينهم ليكون لدى كل مبرمج آخر نسخة حديثة من المشروع.
٤- القدرة على تعقب التغييرات أولاً بأول، بحيث يكتب كل مبرمج ملاحظة أو رسالة عن التغيير الذي قام به ويتم تخزين هذه الملاحظة بالنظام، وبذلك يكون من السهل أن يرى كل عضو من أعضاء الفريق كيف ينمو المشروع مع مرور الوقت وماهية التغييرات التي أجراها كل واحد منهم ولماذا أجراها وما هو تاريخ إجراؤها .

ماهي أنواعه؟
(أنظمة مركزية ) Centralized Systems -1
سمي هذا النظام بالنظام المركزي والذي يحتفظ بشجرة المشروع كاملة وذلك لأن أعضاء الفريق يقومون بإيداع كل تغيراتهم في مكان مركزي واحد فقط.
clip image004 thumb استخدم برامج ال VCS لإدارة عمل فريقك في مشروعك القادم
أنظمة موزعة ) Distributed Systems -2
clip image006 thumb استخدم برامج ال VCS لإدارة عمل فريقك في مشروعك القادم
هذا النظام يعني أن كل مبرمج مثلاً لديه مستودعه الخاص، بحيث يقوم مثلاً قائد الفريق بتقسيم المشروع الى أقسام معينة، وكل مبرمج يأخذ قسم ويقوم بعمله وتجربته بشكل منعزل عن الأقسام الاخرى ثم بعد ذلك يتم دمج النسخ جميعها مع بعضها البعض.
يعد هذا النوع هو الأفضل وذلك لعدة مميزات:
§ كل مبرمج لديه مستودعه “المحلي”، بحيث يستطيع عمل التغييرات ثم التراجع عنها في أي وقت على نسخته الخاصة به.
§ هذا النظام سريع، حيث لا يتطلب الاتصال بالانترنت، إلا عندما يحتاج الشخص مشاركة التغييرات التي قام بها.
§ أصبح دمج أو جمع التغييرات التي قام بها أعضاء الفريق وتجنب التكرار في الملفات أكثر سهولة من ذي قبل.
§ هذا النظام سهل، حيث لا يتطلب إضافة مستخدم جديد في كل مرة ، ولكن ما يجب فعله هنا هو نسخ رابط المشروع للحصول على شجرة المشروع كاملة على الجهاز.

مصطلحات متداولة:
Repository –
هو المستودع الذي يحتفظ بشجرة المشروع كاملة
Pull or Check out -
سحب نسخة من المشروع من المستودع المتواجد على السيرفر
Push or Check In -
وضع نسخة من المشروع الذي يعمل عليه المبرمج في المستودع المتواجد على السيرفر
Commit -
بعد إجراء تعديلات على ملف (ملفات) معينة يجب القيام بهذ الأمر لحفظ هذه التعديلات داخل المستودع
بعد كل تنفيذ لهذا الأمر سوف تنشأ نسخة جديدة من ملفات المشروع بالتعديلات الجديدة، وكل نسخة تكون مرتبطة باسم الشخص الذي عملها وتاريخ عملها
Update -
للحصول على آخر التعديلات التي قام بها أعضاء فريقك ووضعها داخل نسختك المحلية
Merge –
دمج كل التغييرات التي أجراها فريق العمل على نسخهم المختلفة للمشروع لتصبح نسخة واحدة تجمع كل عمل أعضاء الفريق
أمثلة:
· Subversion (SVN)
يعد من أشهر الأمثلة على الأنظمة (المركزية) ويكثر استخدامه في المشاريع المفتوحة المصدر
يتوفر لهذا النظام واجهة رسومية جيدة وبديهية من أجل استعراض و تحرير ملفاتك يطلق عليها Tortoise SVN.
· Git
وهو مثال على الأنظمة (الموزعة) ولقد بدأنا نلاحظ سرعة انتشار استخدامه في مجتمع مطوري الويب الآن لسرعته وفعاليته.
· Mercurial
هو مثال آخر على الأنظمة (الموزعة) ، ويعد هذا النظام هو المفضل لدي شخصياً ولدى الكثير من المبرمجين، فهو سريع جداً بالإضافة الى ذلك فهو سهل الاستخدام.
يتوفر كذلك لهذا النظام واجهة رسومية سهلة الاستخدام يطلق عليها TortoiseHg
بما أني مبرمجة على بيئة.NET وأستخدم برنامج ال Visual Studio لبرمجة التطبيقات المختلفة, فإنني أستخدم أيضاً أداة أخرىVisualHG وهي خاصة لإعطاء دعم لنظام Mercurial داخل برنامج ال Visual Studio.

SVN server الجزء 2 : طريقة استخدام الـ


تحدثنا فى الجزء الاول من هذا الموضوع عن كيفية تثبيت ال SVN server وكيفية أضافة مشروع جديد له لعمل Trunk ورأينا ذلك عمليا .. فى الجزء الثاني والاخير من الدرس نتحدث عن كيفية عمل checkout للتعديل فى المشروع وكيفية عمل بعدها commit للتغييرات وفحص ال history ومعرفة كل شخص عمل ايه ووضع ايه وفي اي زمن تحديدا .
-
كيفية عمل checkout للمشروع ؟؟
تحدثنا فى الجزء الاول عن مشروع ويب وقمنا بعمل import له فى ال repository او المخزن ، والان يبدأ العمل اليومي ، يذهب المبرمج الى جهازه ويقوم بعمل checkout للجزء المختص به ويبدأ بعمل التعديلات اللازمة عليه ، لنرى مثال بسيط على هذه التعديلات.. اذا فتحنا ال XAMPP root وهو الفولدر hdoc وداخله سنقوم بعمل checkout لكي نقوم بالتعديل عليه ورؤية تعديلاتنا مباشرة ، فقط قم بالضغط right click داخل الفولدر وقم باختيار SVN checkout كما هو موضح بالصورة :
سيظهر لك النافذة التالية ، قم باختيار مسار المشروع فى المخزن ثم اضغط ok :
سوف تجد المشروع  تم سحب نسخة منه والصورة التالية تبين شكل ملفات المشروع بعد عمل checkout فى المكان الجديد:
-
لنري كيفية التعديل وتطبيقه على المشروع الرئيسي :
الان سنقوم بتعديل احد الملفات بكتابة كلمة مثلا ثم الحفظ وليكن ذلك على ملف index.html مثلا كما سأفعل انا ، سنجد ان الملف تم وضع علامة عليه كما تشاهد فى الصورة ، اي انه تم تعديله:
وسوف تجد نفس العلامة التي على الملف موجودة على الفولدر الخاص بالنسخة المسحوبة كاملة ولكن هذا التغيير لم يطبق غير على النسخة التى يحتويها الفولدر الحالى الذي يحتوي نسخة من المشروع وليست النسخة الاصلية ، لذا لتطبيق ذلك على النسخة الاصلية سنقوم بعمل commit بالضغط على ل file الذي تم تعديله right click ثم SVN commit او اذا قمت انت بتعديل اكثر من file قم بعمل commit للفولدر كاملا .. كما بالصورة:
بعدها يظهر النافذة التالية لتبين الملفات التي تم تعديلها وتحتاج الى commit لتطبيقها على النسخة الاصلية .. كما هو موضح:
ثم يظهر فى النهاية انه تم عمل commit بنجاح ويذكر ال version الحالى من هذا الملف و هذا المشروع :)كما هو موضح :
-
تلميحات على استخدام ال SVN server ومواقف قد تصادفكم :
  • اذا تعثر عمل commit فى اي وقت فهذا له اسباب كثيرة فقد يكون المسر غير صحيح او يكون قد تم فقد جزء من الملفات فى النسخة وسوف يظهر لك  وقتها رسالة تقول لك كيف تتصرف مثلا ان تقوم بعمل clean-up .
  • انتبه جيدا لمكان عمل checkout لانه قد يكون هناك نسخة اخرى تحمل نفس النوع وفي هذه الحالة قم بعمل SVN update بدلا من checkout .
  • لاحظ ان هناك  مواقع تدعمك بسيرفرات تستعملها بالمجان ومنها SourceForge و Google Projects Hosting .
  • اذا قمت بفحص الدليل documentation الخاص بالسيرفر سوف تتشف المزيد :)
اتمنى ان يكون هذا المقال مفيد وتستطيع من خلاله استخدم الـ SVN سيرفر او اى سيرفر اخر لان المفاهيم ثابتة تقريبا والتغيرات بسيطة جدا ..

SVN server الجزء 1 : طريقة استخدام الـ


فى البوست السابق تحدثت بشكل عام عن ما يسمى بـ version control systems وتكلمت عن هذه الانظمة ومميزاتها واعطيت مجموعة امثلة ووعدت بانني سأكتب عن احدهم فى بوست مستقل ، اليوم سوف اتحدث عن كيفية استخدام ال SVN سيرفر على جهازك الشخصي وهو احد اهم ال Version Control systems واسهلهم ايضا كما سنرى بعد قليل.
ملحوظة : سيكون هذا المقال عبارة عن مجموعة الأسئلة والأجوبة فهذه الطريقة مريحة اكثر للفهم
اذا لقد عرفنا مميزات الـ RCS فى السابق وانه مفيد جدا فى حالات المشاريع الجماعية والشركات ..
فهل مفيد لشخص يعمل بمفرده ؟
الاجابة وبكل ثقة نعم ، كثير منا يعمل منفردا سواء كان يعمل كـ freelancer او يجرب مشاريع  وهو يتعلم tools جديدة او له startup ويقوم بالعمل منفردا مؤقتا ، فكثير منا قابلته المشكل التي ذكرتها فى المقال السابق
ما هي مميزات الـ SVN server ؟
سهل الاستخدم ، عملي ، مجاني ، يسهل عمل المبرمج او المطور دون الحاجة الى قت لفهمه فهو مفهوم جدا كما سنشرحه الأن ، لا يطبق مبدأ الكل او لا شئ All or nothing :)
كيف يتم عمل setup للـ SVN عندك على جهازك؟
نبدأ بالجزء العملي الأن ، اولى الخطوات قم بتنزيل نسخة OneClick وهي نسخة قديمة بعض الشئ ولكنها سهلة ومرنة كبداية وسوف نستعملها اليوم بفرض أن معظم الناس تستخدم نظام ويندوز اما عن اللينكس سوف يتم تغطيته ايضا فى مقالات قادمة باذن الله ، بعد ان يكتمل التنزيل قم بالتثبيت كأي برنامج ولكن اتبع التعليمات التالية:
  1. في أول شاشة من برنامج التثبيت اختر أين سيتم تصبيت ملفات الخادم server .
  2. مكان تثبيت المخزن (repository)، مثلاً (d:\svn) وهو المكان الذي سيستقر به ملفات مشاريعك و ايضا الـ versions الخاصة بها.
  3. اسم المستخدم وكلمة السر لاستخدام  svn وهي افتراضيا ان لم تضعهم تستخدم اسم المستخدم وكلمة السر الخاصة بالويندوز.
  4. مشروع افتراضي (Project)، اختر تجاوز هذه الخطوة (skip this step) ، ثم next
  5. مكان تثبيت TortoiseSVN وهي مجموعة الأدوات للتعامل مع SVN من خلال واجهة الويندوز أو سطر الأوامر ، اختر اي مكان مناسب وليكن فى C://svn
  6. أخيراً Restart عشان تقدر تستعمله .. وده انت هتنفذه وترجع تاني هنا عشن نجرب مع بعض  باقي التعليمات عمليا وفي وقتهاعلى طول .. منتظرك ;)
بعد أن انتهيت من التسطيب على الويندوز لاحظ معي جيدا ان ال shortcut menu أصبحت كالتالى (عند الضغط بالزر الايمن للماوس فى أي مكان) .. إذا كانت لديك أصبحت تحتوي على العنصرين الجديدين .. مبروك لقد تم التثبيت بنجاح :)
بعض الكلمات المستخدمة فى التعامل مع الـ SVN لابد من التعامل معها :
  • Import : وهي تعني اضافة الى المخزن repository .
  • Trunk : هو جزع المشروع او النسخة الاساسية من المشروع
  • Repository : المخزن او امكن الذي يكون به ال versions المختلفة من المشروع ويمكن التحكم بها عن طريق ال SVN سيرفر .
  • Check-out : هذا يعنى أخذ نسخة من المشروع او جزء منه خارج من النسخة الاصلية المخزمة فى ال repository .
  • merge : عملية الدمج بين نسختين من المشروع .
  • patch : وهي ميزة غير عادية تقدمها هذه الانظمة اي ان احد افراد فريقك قد يواجه مشكلة فى نسخة المشروع التي معه ويخبرك تستطيع انت عمل patch فيه حل المشكلة وارسال ال patch file فيقوم هو بعمل apply patch فيتم حل المشكلة بدون نقل الكود بينكم :)
  • branches : وهي تعتبر بمثابة ال versions ولكن بتعبير الشجر فهي فرع من الجزع الرئيسي Trunk .
كيفية التعامل مع السيرفر وارسال نسخة المشروع الرئيسية Trunk ؟؟
سوف افترض اننا نتعامل مع مشروع ويب بلغة php وانا بالطبع اضع المشروع بالكامل فى مجلد Folder يحتوي كل ملفاته واما عن مكان المخزن او الـ repository والذي سوف يحتوي على النسخة الرئيسية من المشروع لاحظ انه بامكانك انت تغيير هذه الاماكن طبقها انت على حسب العناوين عندك وفي الحقيقة المفترض فى هذا المكان يتم وضع العنوان عموما والذي من الممكن ان يكون web server.
سوف نرجع لنقطة الصفر ، الان ال repository فارغ تماما وتريد اضافة مشروع اليه لكي يكون هذا الجزء المضاف هو النسخة الرئيسية من المشروع trunk .. إذا نذهب الى الفولدر الخاص بالمشروع فى مكانه ونضغط عليه right click كما هو ظاهر بالصورة :
سوف يظهر لنا قائمة كما هو موضح نختار منها Import الموضحة باللون الازرق لاخذ نسخة منها الى مكان المخزن وسوف تظهر لنا النافذة التالية :
لاحظ جيدا استخدام file:/// وذلك لانه على جهازك الشخصي انما حين استخدام web server سيتم استبدالها ب http:// ولابد مع اي عملية يتم تنفيذها ارفاق رسالة تدل عما فعلته انت بها كما انا موضح first import ثم نضغط ok فيتم عملية نقل الملفات الى مكان المخزن ولكنها لم تتم كليا وفى انتظار أمر هام لاتمام المهمة سنراه بعد الخطوة التالية :
الان وصل الامر بإضافة هذا الفولدر وما يحتويه من ملفات لسيرفر  الـ SVN ولكن الامر قيد التنفيذ فنرى الملفات والفولدرات تحول ايقوناتها الى الشكل التالي :
مما يستدعي اتمام الامر بعمل commit للتغييرات وهي اضافة مشروع للمخزن ويتم عمله بالضغط على الفولدر الذي يحتوي على المشروع الذي حدث له import ثم SVN commit لتظهر لنا النافذة التالية ، يعرض بها الملفات التي سيتم عمل commit لها وهي ملفات المشروع بالكامل مع اعطاء ايضا رسالة بما فعلت :
لاحظ انه بامكانك اختيار بعض الملفات وترك الأخر كما تحب :) والان نفتح فولدر المشروع فى ال repository ونراه كل فولدر او ملف فيه يحمل علامة صح خضراء كما نرى دليل على انتماء هذا لمجلد لى revision control system وهو SVN server او ال Supversion server :
مبروك لقد أنشأت Trunk لمشروعك ويمكنك الان استخدامه وعمل Checkout كما تحب فى اي مكان :)
إن شاء الله فى الجزء القادم نتناقش حول كيفية سحب نسخة لعمل version من المشروع checkout وكيفية التعديل في المشروع وتطبيق التعديل على النسخة الرئيسية وعمل merge وكيفية استرجاع اخر فيرجن بسهولة وعملية الاسترجاع لكل ال history الخاص بالمشروع كاملا وايضا سيكون هناك بعض التلميحات على حالات اخرى فى الاستخدام وانتظر أرائكم واستفساراتكم حول الموضوع .. أراكم فى الجزء الثاني من الموضوع ان شاء الله :)
المصدر:http://www.medhatdawoud.com/svn-server-%D8%A7%D9%84%D8%AC%D8%B2%D8%A1-1-%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%80/