بسم الله الرحمن الرحيم


1) ماهو SVN ؟
الكلمه هى اختصار لـ Subversion و هى نظام يتيح لأكثر من مبرمج مشاركة الملفات بينهم و امكانية وجود اكثر من اصدار لملف واحد و امكانية استرجاع اى نسخه فى اى وقت.

2) فيما يمكن أن يفيدنى؟
إذا كنت أحد الأشخاص التالى ذكرهم فهو بالفعل ذات فائده جمه لك

  • تقوم بأخذ نسخ من مشاريعك قبل اجراء تعديلات عليها تحسبا أنك تريد الرجوع لنسخه سابقه
  • اكثر من شخص معك يعملوا على نفس المشروع و تريد معرفة من أجرى تعديلات معينه على ملف معين و فى اى وقت
  • تريد الغاء تعديلات قام بها شخص ما عىل ملف ما.
  • تريد منع تغيير ملف معينو كل ما تفعله هو جعل الملف read-only نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي
  • تعطى صلاحيات الدخول على مشروع بإنشاء مستخدمين على نظام التشغيل بالصلاحيات التى تريدها نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي
  • تعانى من استخدام microsoft source safe


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

3) من أين استطيع على الأدوات اللازمه كي ابدء فى استخدام SVN؟

  • الموقع الرسمى لـ SVN يمكنك من خلاله تحميل السورس كود و ادوات اخرى.
  • TortoiseSVN: من أفضل الـ Clients التى تعمل على نظام ويندوز و الذى يندمج بشكل ممتاز مع Windows Explorer مجانى
  • SmartSVN: من أقوى البرامج التى تستخدم فى التعامل مع SVN، البرنامج مصنوع بلغة الجافا و يعمل على العديد من انظمة التشغيل. غير مجانى
  • VisualSVN: هذا البرنامج هو plugin لمحرر Visual Studio حيث يستخدم TortoiseSVN ليقوم العمليات التى يريدها غير مجانى
  • AnkhSvn: هو plugin لمحرر Visual Studio ليعطى دعم SVN بشكل Native دون الحاجه لأى أدوات خارجيه مجانى


سأعتبر هنا انك تعمل على نظام تشغيل ويندوز و تستخدم محرر فيجوال ستديو لذا التطبيق التالى سيكون بإستخدام TortoiseSVN و AnkhSvn

4) هل توجد مصطلاحات احتاج لمعرفتها حتى استطيع التعامل مع SVN؟
نعم توجد العديد من المصطلحات التى تحتاج أن تكون على درايه بها و لكن الأن سأعطيك ما نحتاج منهم:

  • Repository : و يطلق عليها اختصارا الإسم repo و هى قاعدة البيانات التى ستحتوى فيما بعد على مشاريعك، يمكن للـ repo الواحده ان تحتوى على مشروع فأكثر.
  • Checkout : إذا قمت بالإنضمام لمشروع موجود ستحتاج للحصول على كامل المشروع لديك حتى تستطيع ان تكمل التطوير، قم بإستخدام هذا الأمر للحصول على نسخه من شجرة المشروع بأكمله لديك على جهازك.
  • Import : اذا كنت قد انشئت المشروع و عملت عليه لفتره و اردت وضعه داخل repo لديك فأستخدم هذا الأمر لوضع مشروعك داخل الـ repo. أستخدم هذا الأمر مره واحده فقط أو إذا كنت تعلم ماذا تفعل.
  • Add : يقوم هذا الأمر بإضافة ملف او مجلد داخل repo
  • Delete : يقوم هذا الأمر بحذف ملف او مجلد من repo
  • Commit: بعد أن تجرى تعديلات على ملف (ملفات) موجود بالـ repo تقوم بتنفيذ هذا الأمر عليهم لحفظ التعديلات داخل الـ repo، عملية حفظ التعديلات تقوم بإنشاء نسخة جديده من هذه الملفات بالبيانات الجديده و تعطى لها رقم، هذا الرقم يسمى revision number
  • Update: إذا قام أحد المبرمجين معك فى نفس المشروع بعمل Commit لبعض الملفات ستحتاج لتنفيذ هذا الأمر للحصول على أخر التعديلات التى تمت على الـ repo



5) كيف انشئ repo على جهازى حتى استطيع التجربه؟

بإفتراض انك قمت بتحميل TortoiseSVN و قمت بتثبيته لديك قم بالدخول على الـ C و قم بإنشاء مجلد و اطلق عليه svn_db (بالطبع هذا مثال فيمكنك إنشاء المجلد بأى اسم تريد و فى أى مكان تشاء) بعد ذلك قم بفتح المجلد و من داخل اضغط Right Click ثم حدد TortoiseSVN و من القائمه التى ستظهر لك اختر Create repository here، بعدها سيتم انشاء بعض المجلدات و ستظهر رسالة لك تفيد بأنه تم إنشاء الـ repo بنجاح.

6) كيف اقوم بإضافة مشروع موجود من قبل (حتى و إن كان فارغ) داخل الـ repo الذى انشئته للتو؟
قبل أن اعلمك كيف سنحتاج للتكلم بشكل مختصر عن البروتوكولات التى يتعامل معها SVN.

7) بروتوكولات التعامل مع SVN؟
توجد العديد من البروتوكولات التى يتعامل معها SVN أذكر منها:

  • file : و يستخدم للتعامل مع repo موجود على الجهاز الحالى او موجود على الشبكه المحليه، الصيغه العامه له هى:
    كود:
     plain text 
    file://[/repo path] و فى حالتنا هذه سنستخدمه كالتالى:
    كود:
     plain text 
    file:///c:/svn_db فى الأغلب هذا البروتوكول يستخدم من خلال مستخدم واحد فقط و لا يفضل استخدامه من خلال اكثر من مستخدم على نفس المشروع.
  • svn : هذا البروتوكول وجد خصيصا للتعامل مع SVN و هو يستخدم TCP/IP لإرسال و استقبال البيانات و يمكن استخدام SSH (و ذلك عن طريق svn+ssh)، يمكنك الحصول علي هذا البروتوكول بتثبيت برنامج svnserve و يمكنك القول انه بديل للبروتوكول file حيث يمكنك استخدام هذا البروتوكول للوصول على repo على جهازك او الشبكه المحليه او حتى الشبكه الدوليه او شبكه كانت من خلال مستخدم واحد او اكثر من مستخدم، اسلوب استخدامه كالتالى:
    كود:
     plain text 
    svn://[url path] إذا افترضنا انك تريد الوصول للـ repo الذى انشأناه منذ قليل بإستخدام هذا البروتوكول فالصيغه ستكون كالتالى - على افتراض ان جهازك اسمه mypc.
    plain text svn://mypc/svn_db هذا البروتوكول بشكل افتراضى يستخدم البورت 3690
  • http : يمكنك الإتصال بالـ repo إذا كان على سرفر بعيد بإستخدام البروتوكول http او http+ssh و تتم إعدادات الـ repo حينها على السرفر او إذا اتاح لك السرفر Remote Shell لتقوم بما تريد - هذه متاحه من خلال سرفر SourceForge.Net من خلال Interactive Shell خاصتهم، للإتصال بمشروع من خلال هذا البروتوكول كالتالى:
    كود:
     plain text 
    http://[url path]
    https://[url path]



8) لنعود لكيفية إضافة مشروع موجود داخل الـ repo الذى قمنا بعمله؟
إذهب للمشروع الذى تريد إضافته للـ repo و اضغط Right Click عليه ثم اختر TortoiseSVN و من القائمه التى ستظهر اختر Import.
من الشاشه التى ستظهر لك اكتب المسار التالى:
كود:
 plain text 
file///c:/my_proj
بعدها قم بعمل commit و add و delete كما يحلو لك.

9) هل يوجد شئ اخر بحاجه أن اعرفه؟
حقيقة نعم، و لكن التالى هو اختيارى: نظام الـ SVN له اسلوب فى التعامل مع المشاريع و هو أن كل repo لابد و أن يحتوى على 3 مجلدات و هم كالتالى:

  • trunk : يحتوى هذا المجلد على مشروعاتك التى تقوم بالعمل عليها بشكل مستمر انت و باقى الفريق إن وجد.
  • branch : اثناء العمل على المشروع الموجود فى trunk تأتى لك افكار معينه خاصه بالمشروع و لكنها بعيده عن خط عمل المشروع الحالى لذا تقوم بأخذ نسخه من هذا المشروع و تضع به كل الأفكار و عندما يبدأ هذا المشروع فى أخذ منحنى بعيد عن البرنامج الأصلى يتم عمل له مشروع جديد تماما داخل الـ trunk.
  • tag : يحتوى على معلومات هامه خاصه بالـ revisions الموجوده بـ trunk مثل الـ revision رقم 1024 هو الإصدار 1.2 و هكذا.



سأتوقف هنا الأن حتى ألتقط انفاسى و سأكمل في هذا الموضوع لاحقا.


و الله ولى التوفيق