ایران سرفراز- نرم افزار وپروژهای دانشجویی


نرم افزار وپروژهای دانشجویی

مدیریت فایل های یک پروژه نرم افزاری با استفاده ازSubversion

<!-- /* Font Definitions */ @font-face {font-family:Helvetica; panose-1:2 11 5 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Courier; panose-1:2 7 4 9 2 2 5 2 4 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Tms Rmn"; panose-1:2 2 6 3 4 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Helv; panose-1:2 11 6 4 2 2 2 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"New York"; panose-1:2 4 5 3 6 5 6 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:System; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"MS Mincho"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-alt:"MS 明朝"; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Batang; panose-1:2 3 6 0 0 1 1 1 1 1; mso-font-alt:바탕; mso-font-charset:129; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:宋体; mso-font-charset:134; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:PMingLiU; panose-1:2 1 6 1 0 1 1 1 1 1; mso-font-alt:新細明體; mso-font-charset:136; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1 134742016 16 0 1048576 0;} @font-face {font-family:"MS Gothic"; panose-1:2 11 6 9 7 2 5 8 2 4; mso-font-alt:"MS ゴシック"; mso-font-charset:128; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Dotum; panose-1:2 11 6 0 0 1 1 1 1 1; mso-font-alt:돋움; mso-font-charset:129; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:SimHei; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:黑体; mso-font-charset:134; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:MingLiU; panose-1:2 1 6 9 0 1 1 1 1 1; mso-font-alt:細明體; mso-font-charset:136; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134742016 16 0 1048576 0;} @font-face {font-family:Mincho; panose-1:2 2 6 9 4 3 5 8 3 5; mso-font-alt:明朝; mso-font-charset:128; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 134676480 16 0 131072 0;} @font-face {font-family:Gulim; panose-1:2 11 6 0 0 1 1 1 1 1; mso-font-alt:굴림; mso-font-charset:129; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:1 151388160 16 0 524288 0;} @font-face {font-family:Century; panose-1:2 4 6 3 5 7 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Angsana New"; panose-1:2 2 6 3 5 4 5 2 3 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:"Cordia New"; panose-1:2 11 3 4 2 2 2 2 2 4; mso-font-charset:222; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:16777217 0 0 0 65536 0;} @font-face {font-family:Mangal; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:32768 0 0 0 0 0;} @font-face {font-family:Latha; panose-1:2 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1048576 0 0 0 0 0;} @font-face {font-family:Sylfaen; panose-1:1 10 5 2 5 3 6 3 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:16778883 0 512 0 13 0;} @font-face {font-family:Vrinda; panose-1:1 1 6 0 1 1 1 1 1 1; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Raavi; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Shruti; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Sendnya; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Gautami; panose-1:2 0 5 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Tunga; panose-1:0 0 4 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:"Estrangelo Edessa"; panose-1:3 8 6 0 0 0 0 0 0 0; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:"Arial Unicode MS"; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} ins {mso-style-type:export-only; text-decoration:none;} span.msoIns {mso-style-type:export-only; mso-style-name:""; text-decoration:underline; text-underline:single;} span.msoDel {mso-style-type:export-only; mso-style-name:""; text-decoration:line-through; color:aqua;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

Mohsen_mahyar@Yahoo.com

.

فهرست مطالب

عنوان صفحه

مقدمه ۳

۴ Subversion فصل ۱ – نصب و راه اندازی

۲۲ TortoiseSVN فصل ۲ – انجام کارهای متداول کنترلی با

۴۳ Branching & Tagging فصل ۳ – آشنایی با مفاهیم

با محی طهای توسعه مجتمع ۵۲ SVN فصل ۴ – یکپارچگی

فصل ۵ – تهیه پشتیبان از مخز نهای کدها ۵۷

۵۹ SVN فصل ۶ – آشنایی با قلا بها در

۶۴ SVN فصل ۷ – مرور بهترین تجرب ههای کاری با

با سایر ابزارها ۶۷ SVN فصل ۸ – یکپارچگی

۸۲ (Continuous Integration) فصل ۹ – یکپارچگی مداوم و پیوسته

با برنامه نویسی ۸۹ SVN فصل ۱۰ – دسترسی به

منابع و مآخذ ۹۲

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٣

مقدمه

آیا شما هم جزو آن دسته از برنامه نویسانی هستید که هنوز به ازای هر نگارش از برنامه، سور سکدهای خود را فشرده کرده و آنها را بر

اساس تاریخ آرشیو می کنند؟ آیا می توانید گزارشی مقایسه ای را از تغییرات انجام شده در سورس کدهای دو نگارش اخیر برنامه خود ارائه

دهید؟ آیا می دانید فایلی را که هم اکنون بر روی آن مشغول به کار هستید در نگارش قبلی آن چه وضعیتی داشته و مقایسه آن با فایل

فعلی شامل چه موارد و تغییراتی خواهد شد؟ آیا امکان بازگشت سریع و تبدیل سورس کدهای جاری برنامه را به سه نگارش قبل که از نظر

شما پایدارتر هستند، بدون اضطراب و تشنج عصبی و با سرعت هرچه تما متر و بدون خطا دارید؟ آیا می دانید بر روی یک فایل ویژه پروژه

چه کسانی کار کرده اند و چه تغییراتی را اعمال نموده اند؟ آیا می توانید در یک تیم برنامه نویسی در کنار سایر برنامه نویس ها بر روی یک

پروژه واحد کار کنید و ب هسادگی تداخلات رخ داده را مرتفع و یا آخرین تغییرات انجام شده را ادغام نمائید؟ آیا م یتوانید همواره آخرین

نگارش تائید شده پروژه را به سرعت و با دقت تمام به افراد تیم نرم افزاری خود تحویل دهید؟ آیا مکان مجتمعی را جهت نگهداری

سورس کدهای پروژ ههای مختلف، در سازمان خود دارید؟

به همین جهت امروزه در دنیای برنامه نویسی مدرن استفاده از یک سورس کنترل، نه تنها یک ویژگی محسوب نم یشود بلکه یک باید

Microsoft به شمار می رود. محصولات بسیاری توسط شرکت های بزرگ در این راستا جهت استفاده برنامه نویس ها تهیه شده اند مانند

بدلایل بسیاری بین برنامه Microsoft Source Safe برنامه . Team Foundation Server و یا اخیرا Source Safe

بدلیل هزینه های سنگین آن جهت یک پروژه با بودجه متوسط Team Foundation Server نویس ها با اقبال چندانی روبرو نشد و

ارائه داده است که امروزه SVN یا Subversion مناسب نیست. دنیای سورس باز، راه حلی مجانی ، بسیار پخته و بی نظیری را به نام

به عنوان پرطرفدارترین محصول سورس کنترل در دنیا و تحت سکوهای کاری مختلف مانند ویندوز، لینوکس و غیره شناخته می شود.

رابط کاربر گرافیکی را برای Windows Explorer به شمار آمده و با یکپارچه شدن با SVN یک کلاینت TortoiseSVN

با استفاده از یک سری افزودنی می توان یکپارچگی TortoiseSVN جهت کاربران ویندوزی فراهم می آورد. پس از نصب SVN

یکپارچگی آن با ، SVN و غیره دراختیار داشت. نصب و راه اندازی Visual studio کاملی را در محیط های مجتمع توسعه مانند

ویندوز و محی طهای مجتمع توسعه و همچنین نحوه استفاده از آن موضوعات اصلی کتاب جاری را تشکیل م یدهند و این مباحث محدود به

زبان یا محیط برنامه نویسی خاصی نیستند.

وحید نصیری

پائیز ۱۳۸۷

Subversion فصل ١ – نصب و راه اندازی

۴

Subversion فصل ۱ – نصب و راه اندازی

مقدمه

یک برنامه کنترل سورس کد است که توسط جامعه سورس باز پشتیبانی م یشود. از این برنامه در بسیاری از پروژه های Subversion

بزرگ دنیا استفاده می شود که دلایل چندی را م یتوان برای آن برشمرد:

بسیار سریع است و کارآ ، تحت سیستم عامل های مختلفی در دسترس است، مراحل نصب و راه اندازی بسیار ساده ای Subversion

دارد و همچنین استفاده از آن مجانی است. تمامی عملیات کنترل سورس در این برنامه توسط فایل ها صورت گرفته و از ساختارهای

پوشه های متداول سیستم عامل استفاده می شود. به همین جهت کپی و تهیه پشتیبان از آن نیز بسیار ساده می باشد. در این سیستم هیچ

شخصی مالک یک فایل تحت کنترل نبوده و به همین جهت هیچ فایلی جهت استفاده یک شخص خاص در تیم قفل نخواهد شد (مشکلی

انجام داده و در حالت یکی سازی نسخه های کاری Subversion مایکروسافت وجود دارد). مدیریت نهایی را source safe که با

مختلف، تداخل ها را گوشزد م یکند (عموما تغییر یک خط مشخص از کد توسط چندین برنامه نویس مختلف).

را مرور خواهیم کرد. امکان نصب تمامی مواردی که در این فصل بررسی خواهند شد تنها Subversion در ادامه جزئیات نحوه نصب

می توان به آدرس زیر مراجعه نمود: Svn1Click نیز مهیا است. برای دریافت Svn1Click توسط یک بسته نرم افزاری به نام

http://svn1clicksetup.tigris.org/

سرویس مربوطه، مستندات محصول و همچنین ایجاد اولین مخزن ،(TortoiseSVN) TSVN ، SVN این بسته کار نصب

کد را به صورت خودکار انجام م یدهد. اما از این روش در این کتاب استفاده نخواهد شد زیرا قصد داریم با جزئیات کاری (repository)

مربوطه با دقت آشنا شویم تا اگر در آینده به مشکلی برخوردیم با داشتن درک صحیحی از نحوه عملکرد سیستم نصب شده، بتوانیم به

خطایابی آن به پردازیم.

مایکروسافت SourceSafe نسبت به Subversion برتری های

بر مبنای آن طراحی شده است و برنامه نویس در اینجا هیچگاه نگران قطعی ارتباط SVN مدلی است که offline دسترسی

بعنوان جایگزینی جهت سیستم Subversion شدن نخواهد بود. این نکته را باید درنظر داشت که offline با مخزن کد و

جهت مدیریت پروژ ههایی با گستره جغرافیای بسیار زیاد طراحی شده است. CVS . مطرح است CVS کنترل سورس کد

مورد نظر را به فایروال سیستم معرفی port بسیار ساده است. تنها کافی است SVN دسترسی از راه دور به سرور مخزن کد

نمود (در این مورد در ادامه بحث خواهد شد).

بسیار بالاتر است. SourceSafe سرعت بارگذاری پروژه در مقایسه با

به صورت پیش فرض هیچ برنامه نویسی به عنوان مالک فایل معرفی نشده و فایلی قفل SVN همانطور که عنوان شد در

نیز درصورت تمایل SVN که جهت ویرایش فای لها باید آنها را قفل کرد). هر چند در SourceSafe نخواهد شد (برخلاف

می توان فای لها را قفل کرد.

است. SourceSafe سرعت همگام سازی پروژه با سرور مخزن کد بسیار بالاتر از نمونه مشابه در

بهتر مدیریت م یشود (در فصل بعد در این باره توضیحات بیشتری ارائه خواهد شد). SVN تغییرنام و یا انتقال مکان فای لها در

بسیار ارزشمند بوده و مدیریت پروژه را بسیار ساده م ینماید. windows explorer با TortoiseSVN یکپارچگی

امری بسیار ساده است و سوئیچ کردن بین آنها نیز ساده بوده و اثرات SVN داشتن چندین نگارش همزمان از یک پروژه در

جانبی ناگواری را به همراه نخواهد داشت (مبحث انشعابات و برچسب ها که در طی یک فصل به آن خواهیم پرداخت در

پشتیبانی نم یشود). SourceSafe

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۵

پشتیبانی نمی شود (قلاب ها برنامه هایی هستند که در صورت SourceSafe سمت سرور در (hooks) مبحث قلاب های

وقوع یک رخداد خاص اجرا م یشوند. به این مورد نیز در طی فصلی جداگانه خواهیم پرداخت).

می توان یافت. SVN مطابق آمارهای موجود، مستندات ، راهنماها و آموز شهای بیشتری را در مورد

احتمال تخریب و از کار ،SourceSafe مطابق تجربیات کاری بسیاری از برنامه نوی سها، با بزرگ شدن بانک اطلاعاتی

را در گوگل جستجو نمائید). Visual SourceSafe corruption افتادن آن نیز بسیار بیشتر م یشود (برای مثال

تنها تحت ویندوز مهیا است. SourceSafe •

از طرف مایکروسافت تقریبا خاتمه یافته تلقی شده و نگارش های جدید آن تنها به روز رسانی مختصر SourceSafe پروژه

نگارش اصلی آن است که در دهه ۹۰ میلادی ارائه شد.

(Concurrent Versions System) CVS و SVN مقایسه

مطرح شده است. CVS اساسا بعنوان جایگزینی با طراحی بهتر جهت SVN •

اطلاعات کمتری را در شبکه رد و بدل م یکند. CVS در مقایسه با SVN . سریعتر است SVN •

موجود است (در این مورد در فص لهای آتی بیشتر بحث خواهد شد). اما SVN امکان الصاق یک سری ویژگی ها به فای لها در

تنها یک فایل را ذخیره و مدیریت می کند و دیگر هیچ. CVS

که مدیریت پوش هها نیز در آن میسر است). SVN تنها فای لها را مدیریت م یکند (برخلاف CVS •

اساسا جهت مدیریت فایلهای متنی طراحی شده است و برای مدیریت فایلهای غیرمتنی در آن باید تمهیدات ویژه ای را CVS •

به صورت پیش فرض مدیریت هرگونه فایلی را پشتیبانی م یکند. SVN فراهم آورد. اما

CVS تراکنش هایی از نوع همه یا هیچ را پشتیبانی نم یکند (به آن ساختار اتمی نیز گفته م یشود). در SVN برخلاف CVS •

اگر هنگام هماهنگ سازی فایل های پروژه با سرور تعدادی از آنها هماهنگ شده و تعدادی دیگر بدلیل وجود تداخلات قابل

هماهنگ سازی نباشند، پروسه هماهنگ سازی متوقف نشده و این کار باید پس از رفع تداخلات مجددا برای باقیمانده فایلها

صورت گیرد که این مساله م یتواند یکپارچگی مخزن کد را زیر سؤال ببرد. یا تصور کنید که در حین عملیات هماهنگ سازی با

بدلیل عدم پشتیبانی از تراکنش هایی از نوع همه یا هیچ، پروسه را برگشت نزده و در CVS . سرو، ارتباط با سرور قطع گردد

وضعیتی کاملا ناهماهنگ و غیرقابل اطمینان قرار خواهد گرفت.

با توجه به پشتیبانی نکردن از کنترل CVS) امکان انتقال و یا کپی فای لهای تحت کنترل به سادگی مهیا است SVN در

پوشه ها، تغییراتی را که در یک پوشه مانند کپی و انتقال و غیره رخ م یدهد نیز کنترل نمی نماید).

بسیاری از امور را در حالت آفلاین نیز می توان انجام داد (برای مثال ، file caching با توجه به مکانیز مهای SVN در

.(Offline diff پشتیبانی از

اگر علاقمند به مشاهده لیست نسبتا کامل و مفصلی درباره مقایسه برنامه هایی در این ردیف هستید می توان به آدرس زیر مراجعه نمود:

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

SVN دریافت و نصب

:( می توان به آدرس زیر مراجعه نمود (شکل ۱ SVN جهت دریافت برنامه نصب

http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91

Subversion فصل ١ – نصب و راه اندازی

۶

. subversion.tigris.org از سایت SVN شکل ۱- دریافت

binding for به پایان می رسد (در هنگام نصب Next نکته خاصی ندارد و با چند کلیک بر روی دکمه Subversion نصب ابتدایی

را انتخاب کنید. در ادامه در اینباره بیشتر توضیح داده خواهد شد). سپس یک پوشه جدید را در مسیری دلخواه برای Apache 2.2.x

بعنوان پوشه مخزن کد ایجاد نمائید. c:\svn-repos مثال در

ویندوز اضافه نمود تا به سادگی بتوان توسط خط فرمان Environment Variables برنامه را به bin پس از نصب باید مسیر پوشه

system ویندوز مراجعه نموده و بر روی گزینه control panel ویندوز در هر جایی از امکانات آن استفاده نمود. برای این منظور به

.( کلیک کنید (شکل ۲ Environment Variables را انتخاب کرده و بر روی دکمه advanced دوبار کلیک نمائید. برگه

ویندوز. Environment Variables برنامه به bin شکل ۲- افزودن پوشه

را به Subversion برنامه bin را انتخاب کرده و با ویرایش آن مسیر پوشه PATH گزینه ، system variables در قسمت

.( انتهای آن اضافه نمائید (شکل ۳

در نگارش های اخیر آن به صورت خودکار انجام می شود. بنابراین جهت بررسی صحت SVN این عملیات عموما توسط برنامه نصب

را به ترتیبی که عنوان شد، ملاحظه نمود. PATH عملیات نصب م یتوان یکبار متغیر

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٧

ویندوز. PATH شکل ۳- افزودن مسیر برنامه به

به پایان می رسد. SVN تا اینجا کار نصب ابتدایی

بعنوان سرویس ویندوز SVN نصب

برنامه موجود است، می توان اطمینان حاصل نمود که با هر بار شروع bin بعنوان سرویس ویندوز که در پوشه svnserve با نصب

ویندوز ، برنامه به صورت خودکار اجرا خواهد شد و نیازی به دخالت مدیر سیستم جهت ورود به ویندوز و سپس اجرای دستی برنامه وجود

نخواهد داشت. بدین منظور تنها کافی است دستور زیر را در خط فرمان ویندوز اجرا نمائید:

sc create "SVNService" binpath= "C:\Program Files\Subversion\bin\svnserve --service -r

C:\svn-repos" displayname= "SVNService" depend= Tcpip start= auto

مطابق مسیر نصب برنامه توسط شما است و svnserve بدیهی است تنها تغییری که در دستور فوق باید ایجاد گردد، اصلاح مسیر

یا SC در نظر گرفته شده است. در این دستور ، برنامه C:\svn-repos همچنین اصلاح مسیر صحیح پوشه مخزن کد که در اینجا

۲۰۰۳ و غیره جهت نصب یک سرویس ویندوز به کار ، XP مانند NT برنامه استانداری است که در ویندوزهای ، Service Control

گرفته می شود. در هنگام اجرای دستور فوق باید دقت داشت که بین علامت مساوی و مقدار آن باید حتما یک فاصله وجود داشته باشد (در

غیراینصورت موفق به اجرای دستور فوق نخواهید شد).

پس از اجرای آن . services.msc : اکنون باید سرویس نصب شده را اجرا نمود (شکل ۴). برای این منظور در خط فرمان تایپ کنید

قرار داده (این مورد automatic را یافته ، نوع شروع آنرا بر روی SVNService کنسول سروی سهای ویندوز ظاهر م یگردد. سرویس

توسط خط فرمان نصب سرویس پیشتر تنظیم شده است) تا مطمئن شویم که پس از هربار روشن شدن رایانه، سرویس مورد نظر ما به

کلیک کنید. start صورت خودکار و بدون دخالت مدیر سیستم اجرا م یگردد و سپس بر روی دکمه

Subversion فصل ١ – نصب و راه اندازی

٨

و تنظیمات مربوطه SVN شکل ۴- اجرای سرویس

این مرحله را با استفاده از خط فرمان نیز م یتوان به صورت زیر انجام داد:

c:\>sc start SVNService

و ایجاد اولین مخزن کد TortoiseSVN نصب

تا همینجا به پایان م یرسد. توسط دستورات خط فرما ن آن می توان مدیریت کاملی را بر روی مخزن کد خود داشت. برای SVN نصب

می توان دستور زیر را در خط فرمان اجرا کرد: (C:\svn-repos) مثال برای ایجاد یک مخزن کد جدید در پوشه اصلی مخازن

svnadmin create c:\svn-repos\test1

را در خط فرمان svnadmin ویندوز قرار گرفت، به سادگی می توان برنامه PATH برنامه در bin با توجه به اینکه پیشتر پوشه

فراخوانی کرد.

اما از آنجائیکه به خاطر سپاری دستورات خط فرمان در دنیای ویندوز آنچنان متداول نیست، برنامه نویس ها رابط های کاربر گرافیکی

می باشد. لیست TortoiseSVN توسعه داده اند که یکی از پرطرفدارتری ن آنها برنامه SVN مختلفی را جهت استفاده از توانای یهای

را در آدرس زیر م یتوانید ملاحظه نمائید: SVN سایر کلاینت های

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

را Windows Explorer به شمار آمده و قابلیت یکپارچگی با SVN یکی از محبوب ترین کلاینت های TortoiseSVN برنامه

دارا می باشد . امکانات آن با کلیک راست بر روی یک پوشه و یا یک فایل در ویندوز قابل دسترسی و استفاده است. همچنین اکثر

(wrappers) مختلف نوشته شد هاند، در حقیقت محصور کنند ههای (IDE) که برای محیط های مجتمع توسعه (add-in) افزودنی هایی

TortoiseSVN را بر روی یک سرور نصب کرده باشید، کلاینت ها با استفاده از SVN توانایی های این برنامه م یباشند. همچنین اگر

ندارند. SVN می توانند از تمامی امکانات سرور مخزن کدها استفاده نمایند و نیازی به نصب

برای دریافت این برنامه م یتوان به آدرس بعد مراجعه نمود:

http://www.tortoisesvn.net/downloads

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٩

همچنین از آدرس فوق، بسته زبان فارسی برنامه نیز قابل دریافت است.

میسر است و راه اندازی مجدد سیستم (جهت یکپارچگی کامل Next پس از نصب ساده این برنامه که تنها با چند کلیک بر روی دکمه

نوبت به تنظیمات آن م یرسد. مسیر زیر را در ویندوز دنبال نمائید تا صفحه تنظیمات برنامه باز شود (گزینه ،(windows explorer با

نیز دردسترس است): TortoiseSVN با کلیک راست بر روی یک پوشه و یا فایل و انتخاب settings

Start → All programs → TortoiseSVN → Settings

همانطور که عنوان شد اگر بسته زبان فارسی برنامه را نصب نمائید، در قسمت تنظیمات می توان این زبان را بعنوان زبان پیش فرض

منوها و تنظیمات برنامه مورد استفاده قرار داد (شکل ۵). هرچند در این کتاب جهت آشنایی با یک سری مفاهیم اولیه از زبان انگلیسی پیش

فرض استفاده خواهیم کرد.

انتخاب نمائید (این svn را جهت پوشه های مدیریتی .svn بجای _svn همچنین اگر برنامه نویس دات نت هستید گزینه استفاده از

مشکل ساز است، اگر از نگار شهای جدیدتر استفاده می کنید، مشکل VS.NET و 2003 ASP.NET 1.x مورد صرفا با پروژ ههای

خاصی وجود نخواهد داشت).

. TortoiseSVN شکل ۵- تنظیمات اولیه برنامه

یا الگوی عمومی نادیده ها (مطابق ترجمه فوق، یا فایل هایی که باید توسط برنامه ندید گرفته global ignore pattern در قسمت

شده و وارد مخزن کد نشوند) می توان موارد زیر را اضافه کرد:

"*.dcu *.~* dcu temp *.exe *.zip *.bkm *.ddp *.cfg *.dof *.dsk *.ini *.hlp *.gid *.bmp *.png

*.gif ~* *.log bin debug release *.map *.chm *.bkf Thumbs.db *.mdb .obj *.elf *.stat *.ddp

*.bpl *.map *.GID *.hlp *.opt *.dll *.raw *.BIN *.obj *.pdb *.scc Debug Release *.xml obj

*.~* *.backup *.INI *.ArmLog *.KeyLog *.NanoLog *.Stats *.PreARM *.old *.drc *.*~

*.doc *.pdf *.bmp *.jpg *.MRW *.NEF *.ORF *.psd *.X3F __history *.local *.identcache

*.bak Thumbs.db *.ldb *.dex *.rar DllDcu *.lck CVS cvs *.txt *.TXT *.jdbg *.HLP *.KWF

*.xls *.cnt *.dsm *.dti *.tmp *.lnk *.cbk *.mes *.suo *.ncb *.user _ReSharper.* [Bb]in obj

[Dd]ebug [Rr]elease *.aps *.eto"

یا دلفی کار م یکنند ، مفید است. VS.NET موارد فوق جهت کار افرادی که با

باید دقت داشت که این الگوها حساس به حروف کوچک و بزرگ هستند. برای مثال الگوی بعد بحث حساس بودن به کوچکی و بزرگی

حروف را پیاده سازی است:

Subversion فصل ١ – نصب و راه اندازی

١٠

*[Bb][Ii][Nn]

*[Oo][Bb][Jj]

*.[Ss][Uu][Oo]

*.[Cc][Ss][Pp][Rr][Oo][Jj].[Uu][Ss][Ee][Rr]

*.[Vv][Bb][Pp][Rr][Oo][Jj].[Uu][Ss][Ee][Rr]

*.[Ww][Ee][Bb][Ii][Nn][Ff][Oo]

برای ایجاد اولین مخزن کد یک پوشه دلخواه را ایجاد نمائید، برای مثال

C:\Repositories\TestRepo

:( روی پوشه کلیک راست کرده و گزینه زیر را انتخاب نمائید (شکل ۶

TortoiseSVN → create repository here

شکل ۶- ایجاد اولین مخزن کد.

پس از ایجاد مخزن کد، پیغام زیر را دریافت خواهید کرد:

شکل ۷- ایجاد موفقیت آمیز مخزن کد.

مخزن کد درحقیقت بانک اطلاعاتی مرکزی تغییرات انجام شده بر روی پروژه شما است که در ادامه به آن معرفی و اضافه خواهد شد.

توصیه م یکنند که ساختار یک مخزن کد بهتر است به صورت زیر باشد: subversion مستندات رسمی

/branches/

/trunk/

/tags/

توسعه اصلی پروژه رخ خواهد داد. برای ایجاد این ساختار، بر روی پوشه مخزن کد ایجاد شده کلیک راست کرده و ، trunk که در پوشه

:( گزینه زیر را انتخاب کنید (شکل ۸

TortoiseSVN → Repo-browser

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

١١

شکل ۸- انتخاب مرورگر مخزن جهت ایجاد پوش ههای کاری.

را tags و trunk ، branches در صفحه مرورگر مخزن گشوده شده، بر روی لینک مخزن کلیک راست کرده (شکل ۹) و سه پوشه

ایجاد نمائید.

شکل ۹ – نحوه ایجاد فولدرهای جدید در مخزن کدها.

در trunk شامل کپی خاصی از tags ایجاد این ساختار بدین شکل الزامی نبوده و کاملا وابسته به تصمیم گیری شما است. برای مثال

یک زمان مشخص هستند:

\-- tags

\-- 1.0 Release

\-- 1.1 Beta

\-- 1.1 Release

قرار داده و آنرا به مخزن کد ایجاد شده اضافه نمائیم. فرض کنید پروژه ما در Subversion اکنون م یخواهیم پروژه خود را تحت کنترل

:( قرار دارد. بر روی پوشه آن کلیک راست نموده و گزینه زیر را انتخاب کنید (شکل ۱۰ C:\osl\testPrj مسیر

TortoiseSVN → Checkout

شکل ۱۰ - معرفی پوشه پروژه به مخزن کد ایجاد شده

Subversion فصل ١ – نصب و راه اندازی

١٢

مخزن کد و وارد کردن مسیر پوشه پروژه)، می توان پروژه را به مخزن کد trunk در صفحه باز شده مطابق تنظیمات شکل ۱۱ (انتخاب

مواجه _svn اگر به پوشه پروژه مراجعه کنیم با یک سری فایل مخفی قرار گرفته در پوشه ، OK افزود. پس از کلیک بر روی دکمه

مراجعه windows explorer می باشد. همچنین اگر به Subversion خواهیم شد که نشانگر تحت کنترل بودن این پوشه توسط

. ( کنیم، __________آیکون این پوشه نیز تغییر کرده است (شکل ۱۲

شکل ۱۱ - مراحل معرفی پروژه به مخزن کد

است. Subversion شکل ۱۲ – نمایی از یک پوشه که تحت کنترل

است. جهت افزودن فایل ها Subversion تنها کاری که تا بدین لحظه صورت گرفته است ، اعلام تحت کنترل قرار دادن پوشه پروژه به

( به مخزن کد گزینه زیر را انتخاب کنید (شکل ۱۲

TortoiseSVN → Add

شکل ۱۲ - افزودن پوشه پروژه به مخزن کد

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

١٣

در اینجا می توان کل پوشه را به مخزن کد معرفی کرد یا تنها چند فایل و یا یک یا چند پوشه درون آنرا. در صورت نیاز، در صفحه ظاهر

.(Add to ignore list) شده افزودن فایلها، با کلیک راست بر روی هر آیتم م یتوان آنها را به لیست موارد صرفنظر شونده اضافه کرد

پس از این مرحله آیکون پوشه و فایل های درون آن تغییر می کنند. این تغییر بدان معنا است که فایل ها به مخزن کد اضافه شده اند اما

هنوز همگام با سرور و مخزن کد نیستند (ذخیره نشده اند). برای این همگام سازی روی پوشه پروژه کلیک راست کرده و گزینه زیر را

انتخاب نمائید:

TortoiseSVN → Commit

کلیک OK در صفحه باز شده توضیحاتی معنا دار (عموما خلاصه تغییرات انجام شده جهت مراجعات بعدی) را وارد کرده و بر روی دکمه

.( نمائید (شکل ۱۳

شکل ۱۳ - همگام سازی تغییرات پروژه محلی با سرور مخزن کد.

جهت بررسی عملیات انجام شده، به پوشه مخزن کد اصلی مراجعه نموده و بر روی آن کلیک راست کنید. سپس گزینه نمایش مرورگر

می توان لیست فایلهای ، trunk در اینجا با مراجعه به پوشه .(TortoiseSVN → Repo-browser) مخزن کد را انتخاب نمائید

افزوده شده به مخزن را مشاهده نمود.

بنابراین به صورت خلاصه :

ابتدا یک پوشه در مخزن کد ایجاد کنید. •

نمائید. Checkout پوشه پروژه مورد نظر را

.(Add فایلهای مورد نظر یا کل پوشه را به مخزن کد اضافه کنید (انتخاب گزینه ، TortoiseSVN با استفاده از

.(Commit) تغییرات نهایی را به سرور اعمال نمائید

Subversion فصل ١ – نصب و راه اندازی

١۴

تنظیمات سطوح دسترسی به مخزن کد

ساخته شد. برای تنظیمات امنیتی و تعیین سطوح دسترسی به آن C:\Repositories\TestRepo\ اولین مخزن کد ما در مسیر

باید فایلهای موجود در پوشه زیر را ویرایش کرد:

C:\Repositories\TestRepo\conf

می توان نوع دسترسی را مشخص کرد: svnserve.conf با ویرایش فایل متنی

[general]

anon-access = none

auth-access=write

password-db=passwd

realm=trunk

به این ترتیب (مطابق تنظیمات فوق) کاربران تعیین اعتبار نشده هیچگونه دسترسی به مخزن کد نخواهند داشت. کاربران تعیین اعتبار

شده، دسترسی خواندن و نوشتن خواهند داشت.

نکته: هنگام ویرایش این فایل نباید پیش از نام یک متغیر هیچگونه فاصله ای وجود داشته باشد، در غیراینصورت هنگام اتصال به

مخزن با خطای زیر مواجه خواهید شد:

svnserve.conf:12: Option expected

می توان کاربران مجاز را تعریف نمود (فاصله های اضافی را حذف نمائید): passwd و با ویرایش فایل متنی

[users]

user1=pass1

دقت نمائید که در اینجا نام کاربران و کلمات عبور، حساس به حروف کوچک و بزرگ هستند.

که در این پوشه وجود دارد م یتوان دسترسی های بسیار محدود و ویژ های را برای کاربران تعیین کرد. برای مثال authz با ویرایش فایل

مشخص را داد، برای مثال: tag به یک کاربر تنها دسترسی به یک

[projects:/spreadsheet/tags/release-1.0]

User1=rw

User2=r

در مورد سرویس دهی مخزن های کد می توان از دستورات خط فرمان زیر استفاده svnserve نکته : جهت بررسی عملکرد

مثلا وارد کنید : URL نیز م یتوان کمک گرفت. در صفحه مربوطه بجای repo-browser کرد (شکل ۱۴ )، و یا از

svn://localhost/test1

در این حالت باید بتوان به مخزن دسترسی داشت.

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

١۵

. svnserve شکل ۱۴ - بررسی عملکرد

فعال کردن دسترسی از راه دور به سرور مخز نهای کد

را در فایروال ویندوز (و یا هر فایروال دیگری SVN مربوط به port برای فعال کردن دسترسی از راه دور به سرور مخز نهای کد، باید

که از آن استفاده م یکنید) باز نمود. در اینجا نحوه انجام اینکار در فایروال ویندوز سرور ۲۰۰۸ بررسی می شود:

کلیک change settings در کنترل پنل ویندوز سرور، بر روی فایروال ویندوز دوبار کلیک کرده و در صفحه باز شده بر روی لینک

.( شماره ۳۶۹۰ را اضافه نمائید (شکل ۱۵ port کلیک نموده و add port بر روی دکمه exceptions نمائید. در برگه

جهت دسترسی از راه دور به آن در فایروال ویندوز. SVN برنامه port شکل ۱۵ - افزودن

Subversion فصل ١ – نصب و راه اندازی

١۶

بر روی ، port داشته باشند، در صفحه افزودن و یا ویرایش SVN اگر می خواهید تنها رایانه های ویژه ای در شبکه شما دسترسی به

های این رایان هها را وارد نمائید. IP کلیک نموده و لیست change scope دکمه

: (repo-browser اکنون برای تست این مخزن کد در رایان های دیگر در شبکه، از خط فرمان زیر استفاده نمائید (و یا برنامه

svn info svn://Server-IP/test1

امن کردن ویندوز سرور مخزن کدها

بعنوان کاربری که مجوز اجرای این سرویس و local system account دقت کرده باشید، از SVN اگر هنگام نصب سرویس

.( برنامه را دارد به صورت پیش فرض استفاده شده است (شکل ۱۶

.SVN شکل ۱۶ - تعیین حساب کاربری مجاز جهت اجرای سرویس

همواره باید بخاطر داشت که این کاربر تنها باید دسترسی اجرای این برنامه را داشته باشد و نه هیچ کار دیگری در سیستم . بنابراین

با توجه به اینکه دسترسی کاملی بر روی تمامی برنام ههای سرور دارد، جهت اینکار مناسب نیست. local system account

به همین جهت کاربر جدیدی را در ویندوز (یا شبکه) تعریف نموده (با بg_  x          ____کلمه عبوری قوی که هیچگاه منقضی نمی شود) و سپس از آن

بر روی پوشه اصلی مخزن کد full control بعنوان حساب کاربری این سرویس استفاده نمائید. پس از اینکار باید به این کاربر دسترسی

می توان اینکار را انجام داد). security داده شود (بر روی پوشه مربوطه کلیک راست نموده و با انتخاب خواص و سپس مراجعه به برگه

کشف شود، با توجه به محدود شدن SVN هر چند به ظاهر این مورد کمی کار مدیر سیستم را بیشتر خواهد کرد، اما اگر باگی امنیتی در

دسترسی آن، عملا سطح امنیت بالاتری را در سیستم و شبکه تجربه خواهید کرد.

باید یکبار این سرویس را متوقف و سپس اجرا نمود تا تغییرات انجام شده اعمال شوند. ، SVN پس از تغییر حساب کاربری سرویس

و دسترسی به مخزن کدها از طریق مرورگر وب Apache نصب وب سرور

را مرور نمائیم. Subversion HTTP Module در ادامه قصد داریم نحوه استفاده از

: (Win32 Binary without crypto) ابتدا وب سرور آپاچی را از آدرس زیر دریافت کنید

http://httpd.apache.org/download.cgi

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

١٧

مایکروسافت IIS ، نصب ابتدایی آن نکته خاصی ندارد و پیش فر ضهای برنامه نصاب را بپذیرید. پس از نصب، اگر پیشتر بر روی سرور

وب سرور آپاچی آغاز به کار نخواهد کرد. برای رفع این تداخل، فایل ، IIS را نصب کرده باشید، با توجه به استفاده از پورت ۸۰ توسط

متنی زیر را ویرایش کنید:

C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf

.( کنید (شکل ۱۷ start تغییر دهید. پس از آن سرور را Listen را یافته و برای مثال به 81 Listen در آن سطر 80

شکل ۱۷ - راه اندازی وب سرور آپاچی.

پس از راه اندازی وب سرور آپاچی، در مرورگر وب خود آدرس زیر را جهت آزمودن صحت عملیات نصب وارد کنید:

http://localhost:81/

را باید مشاهده نمائید. It works پیغام

مربوط به وب سرور آپاچی modules را یافته و در پوشه so مراجعه کرده و دو فایل با پسوند subversion اکنون به محل نصب

کپی نمائید. این دوفایل عبارتند از :

C:\Program Files\Subversion\bin\mod_authz_svn.so

C:\Program Files\Subversion\bin\mod_dav_svn.so

آنها را در پوشه زیر کپی کنید:

C:\Program Files\Apache Software Foundation\Apache2.2\modules

وب سرور آپاچی که پیشتر در مورد آن صحبت شد، نحوه بارگذاری این ماژول ها را تعیین httpd.conf اکنون باید با ویرایش فایل

را گشوده و سه سطر زیر را به آن اضافه کنید: httpd.conf نمائیم. مجددا فایل

LoadModule dav_module modules/mod_dav.so

LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so

همچنین به انتهای فایل خطوط زیر را نیز اضافه نمائید:

<Location /repos/>

DAV svn

SVNParentPath "C:\svn-repos"

</Location>

Subversion فصل ١ – نصب و راه اندازی

١٨

Location مسیر اصلی مخزن های کد است که سایر مخزن ها در آن واقع شده اند. همچنین توسط SVNParentPath در اینجا

هایی به شکل زیر خواهد شد: URL وب سرور قادر به تفسیر ، /repos

http://localhost:81/repos/repository-name

در اینجا یک نام دلخواه است. repos

Apache service نمائید تا تغییرات اعمال شوند. اینکار را با استفاده از stop/start پس از ذخیره فایل ، وب سرور آپاچی را یکبار

همانند شکل ۱۷ می توان انجام داد. monitor

یکی از مخازن کد تعریف شده است): test اکنون جهت مشاهده مخزن کد، آدرس زیر را در مروگر وارد نمائید ( 1

http://localhost:81/repos/test1/

نتیجه کار باید مانند شکل ۱۸ باشد.

شکل ۱۸ - دسترسی به مخرن کدها از طریق مرورگر وب.

ویندوز مراجعه کرده و خطای مورد نظر را مشاهده نمائید. عموما اشتباهات event log viewer اگر با خطای ۵۰۵ مواجه شدید، به

استاندارد ویندوز قابل مشاهده خواهد بود. event viewer تایپی در این فایل مساله ساز م یشوند که علت دقیق خطا در

مرحله بعدی این تنظیمات، بحث اعتبار سنجی و محدود کردن کاربرانی است که می توانند به مخزن کد مورد نظر از طریق مرورگروب

دسترسی داشته باشند. برای این منظور تنظیمات زیر را بجای تنظیمات ساده قبلی وارد نمائید:

<Location /repos/>

DAV svn

SVNParentPath "C:\svn-repos"

SVNListParentPath on

AuthType Basic

AuthName "Subversion repository"

AuthUserFile bin/apachesvnpasswd

Require valid-user

</Location>

تعریف شوند مجاز به دسترسی apachesvnpasswd تنها کاربرانی که در فایل ، Require valid-user با توجه به عبارت

خواهند بود. برای تعریف این کاربران و ایجاد این فایل مراحل زیر را طی کنید:

C:\Program Files\Apache Software Foundation\Apache2.2\bin>htpasswd.exe -c apachesvnpasswd user1

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

١٩

وب سرور آپاچی ایجاد شده و سپس برای تعریف کاربر bin در پوشه apachesvnpasswd فایل ، –c در اینجا با توجه به سوئیچ

نمی باشد (استفاده از این –c کلمه عبور آن نیز سؤال پرسیده خواهد شد. برای ایجاد کاربری جدید نیازی به استفاده از سوئیچ ، user1

سوئیچ سبب ایجاد مجدد فایل از نو خواهد شد).

قبلی را در مرورگر وارد کنید با شکل ۱۹ URL کنید تا تنظیمات اخیر اعمال شوند. اکنون اگر stop/start مجددا وب سرور آپاچی را

مواجه خواهید شد.

شکل ۱۹ - پیاده سازی اعتباری سنجی برای دسترسی وب به مخزن کدها

علاوه بر این م یتوان دسترسی کاربران را نیز کاملا تعریف نمود. در این حالت تنظیمات ما به شکل زیر درخواهد آمد:

<Location /repos/>

DAV svn

SVNParentPath "C:\svn-repos"

SVNListParentPath on

AuthType Basic

AuthName "Subversion repository"

AuthUserFile bin/apachesvnpasswd

AuthzSVNAccessFile bin/apachesvnauth

Require valid-user

</Location>

Subversion فصل ١ – نصب و راه اندازی

٢٠

با محتویات زیر apachesvnauth وب سرور آپاچی به نام bin برای تعریف فایل سطوح دسترسی، یک فایل متنی را در مسیر پوشه

ایجاد نمائید:

[test1:/]

user1 = rw

داده شده است. test دسترسی خواندن و نوشتن به مخزن کد 1 user در اینجا به کاربر 1

برای مثال تنظیم زیر دسترسی تنها خواندنی به تمامی کاربران اعتبار سنجی شده اعطا م یکند:

[/]

* = r

نمائید. stop/start پس از انجام این تغییرات وب سرور آپاچی را

Visual SVN Server با استفاده از SVN نکته: نصب

یک ، SVN ، که از آدرس زیر قابل دریافت است، کار نصب وب سرور آپاچی Visual SVN Server برنامه رایگان دیگری به نام

کنسول مدیریتی و سایر موارد را به صورت یک بسته نرم افزاری بسیار ساده انجام م یدهد.

http://www.visualsvn.com/server/download/

همچنین تمامی تنظیماتی که پیشتر در مورد ایجاد کاربران و تعیین سطوح دسترسی آنها نیز عنوان شد توسط این سرور رایگان به

سادگی هر چه تما متر و بدون نیاز به درگیر شدن با جزئیات آنها قابل انجام است. بعلاوه توسط آن امکان استفاده از کاربران تعریف شده در

.( نیز به سادگی مهیا است (شکل ۲۰ Active directory

را انتخاب کنید تا مخزن کد create new repository کلیک راست کرده و گزینه repositories پس از نصب آن بر روی شاخه

جدیدی را بتوان ایجاد نمود. پس از ایجاد مخزن جدید، بر روی شاخه مخزن ایجاد شده کلیک راست نمائید و گزینه خواص را انتخاب کنید

و غیره نیز م یتوان این سطوح را trunk تا بتوان سطوح دسترسی به مخزن را تنظیم نمود (بر روی هر یک از پوشه های مخزن، مانند

نسبتا SVN ارائه می شود نسبت به نمونه استاندارد ارائه شده توسط Visual SVN Server تنظیم کرد). صفحه مرورگری که توسط

شکیل تر است.

دسترسی کاربرانی که اعتبار سنجی نشده باشند پشتیبانی نمی شود. در صورت نیاز برای اینکه به Visual SVN Server توسط

استفاده نمائید. everyone تمامی کاربران دسترسی های لازم را بدهید، باید از کاربری به نام

هرچند احتمالا شما نیز از این محصول استفاده خواهید کرد، اما اکنون با توجه به توضیحات پیشین ارائه شده در این فصل می دانید که

چگونه است. Visual SVN Server ساز و کار درونی برنامه هایی مانند

مواردی که در این فصل عنوان شدند شاید کمی طولانی به نظر برسند اما تنها یکبار باید انجام شوند و نرم افزارهایی مانند

عمده مطالب عنوان شده در این فصل را در کمتر از یک دقیقه برای شما پیاده سازی خواهند کرد. Visual SVN Server

مجانی (جهت پروژه های شخصی) خدمات ارائه می دهند مانند: SVN لازم به ذکر است سای تهایی نیز وجود دارند که بعنوان سرور

http://www.assembla.com/

http://unfuddle.com/

http://www.beanstalkapp.com/

https://gna.org/

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٢١

های لینوکسی نیز وجود دارند که برای این منظور طراحی ش ده اند. برای مثال: LiveCD و یا

http://buildix.thoughtworks.com/

آشنایی دارید. اگر تمایل داشته باشید نمونه ای شبیه به آنها را بر اساس CodePlex و یا Sourceforge احتمالا با سایت های

این امکان را به شما خواهد داد: SharpForge راه اندازی کنید، برنامه سورس باز SVN با استفاده از امکانات ASP.Net 2.0

http://www.codeplex.com/SharpForge

. Visual SVN server شکل ۲۰ - برنامه نصاب

TortoiseSVN نکته: بهینه سازی کارآیی سیستم پس از نصب

به صورت پیش فرض تمامی پوشه های موجود در تمامی درایوهای رایانه را جهت اعمال آیکون های TortoiseSVN برنامه

مخصوص خود تحت کنترل قرار می دهد. بدیهی است که این مورد م یتواند تاثیر منفی بر روی کارآیی سیستم داشته باشد (هر چند بسیار

ناچیز است).

برنامه مراجعه کرده و گزینه زیر را انتخاب کنید: settings برای محدود کردن این محدوده تحت کنترل، به قسمت

Look and Feel > Icon Overlays

محدوده تحت نظر قرارگیری برنامه را م یتوان محدود کرد. برای اینکه جستجوی ، include paths در اینجا با تنظیم قسمت

باشد، نیاز است در پایان مسیر ذکر شده یک ستاره نیز (recursive) در پوشه های مشخص شده بازگشتی یا عمقی TortoiseSVN

. c:\svn\* قرار داد. برای مثال

TortoiseSVN فصل ٢ – انجام کارهای متداول کنترلی با

٢٢

TortoiseSVN فصل ۲ – انجام کارهای متداول کنترلی با

مقدمه:

به صورت زیر است: SVN نحوه استفاده عمومی از

فضایی در مخزن کدها به یک پروژه اختصاص داده م یشود. •

.(check in) سپس اولین نگارش فایلهای پروژه به مخزن کد وارد م یشود

در ادامه هر یک از اعضای تیم برنامه نویسی، یک نسخه کاری محلی را از سرور مخزن کد دریافت کرده و شروع به کار

.(check out) می کنند

.(commit) هر یک از اعضاء در حین کار، نگار شهای تکمیل شده خود را با سرور هماهنگ م یکنند

یا (update) همواره آخرین نگارش تغییرات را اختیار داشته باشند ، SVN در این بین سایر اعضاء م یتوانند با استفاده از

.(merge) تغییرات خود را با سایر اعضای تیم ادغام نمایند

به شمار می آید، بررسی SVN که یکی از کلاینت های TortoiseSVN در ادامه نحوه انجام این امور روزمره کاری را با استفاده از

خواهیم کرد.

و دلایل محبوبیت آن: TortoiseSVN بررسی ویژگ یهای

محصولی است رایگان و سورس باز. •

استفاده از آن ساده است: •

را می توان مستقیما توسط SVN تمامی دستورات اجرایی ، windows explorer بدلیل یکپارچگی آن با o

فراخوانی کرد. windows explorer

تنها دستوراتی را نمایش می دهد که قابل اجرا بر روی یک فایل یا پوشه هستند و دستوراتی را که مجاز به اجرای o

آنها نمی باشید ، نمایش نخواهد داد.

نمایش وضعیت جاری فای لها و پوش ههای پروژه با استفاده از آیکو نهای ویژه. o

رابط کاربری قوی و پیوسته در حال بهبود و توسعه بر اساس نظرات کاربران. o

فراهم کرده است. windows explorer امکان انتقال و یا کپی فای لها و پوش ههای تحت کنترل را با استفاده از o

را پشتیبانی م یکند. این پروتک لها شامل موارد زیر هستند: SVN تمامی پروتک لهای

•http

•https

•svn://

•svn+ssh://

•file:///

•svn+xxx://

بسیار حرفه ای با قابلی تهای بررسی خطاهای نوشتاری، فرمت کردن کد و غیره است. commit دارای صفحات

امکان تهیه نمودار از انشعابات پروژه توسط آن. •

امکان تنظیمات ویژه تنها برای یک پروژه خاص نیز در آن مهیا است (سفارشی سازی خواص). برای مثال تنظیم حداقل تعداد

پیش از ارسال آن به سرور مخزن کد. commit حروف مورد نیاز در مورد توضیحات یک

.(issue tracking systems) امکان یکپارچه سازی با سیست مهای ردگیری خطاها و با گهای برنامه

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٢٣

، TortoiseMerge همراه آن یک سری از ابزارهای بسیار سودمند جهت کار با فایل ها و پوش هها نیز ارائه م یشود مانند

در مورد این ابزارها در طی این فصل و فصل های آینده ) . SubWCRev و TortoiseIDiff ، TortoiseBlame

بیشتر توضیح داده خواهد شد)

فایل های زبان آن برای بسیاری از کشورهای مختلف دنیا وجود دارد. •

بسیار پایدار است. (این مورد عموما یکی از ویژگ یهای محصولات سورس باز است که با تعامل با تعداد بیشماری از کاربران در

سراسر دنیا تهیه م یشوند و پیوسته در حال بهبود هستند)

مخصوص و غیره) forum ، mailing list پشتیبانی خوبی دارد. (اعم از راهنمای بسیار قوی تا

دریافت آخرین سور س کدها از سرور مخزن کد

اگر شما برنامه نویسی هستید که قصد دارید به یک سرور مخزن کد متصل شوید، برای دریافت آخرین سورس کدها از مخزن کد

(جهت ایجاد اولین کپی محلی)، ابتدا پوشه دلخواهی را ایجاد نموده ، بر روی آن کلیک راست کرده و مسیر زیر را طی نمائید :

TortoiseSVN → Checkout

کلیک نمائید (شکل های ۱۰ و ۱۱ فصل ۱). پس از مدتی (بسته به OK در صفحه باز شده آدرس مخزن کد را وارد کرده و بر روی دکمه

سرعت دریافت اطلاعات از شبکه ویا اینترنت) تمامی اطلاعات پروژه را دریافت خواهید کرد. اصطلاحا به این عملیات تهیه یک نسخه

نیز گفته م یشود. (Working copy) کاری

را انتخاب کنید، آخرین نگارش موجود در مخزن کد را دریافت خواهید کرد و Head Revision باز شده اگر Checkout در صفحه

عددی را وارد نمائید، آن نگارش ویژه به شما ارائه خواهد شد. Revision اگر در قسمت

پس از پایان کار اگر بر روی پوشه اصلی این پروژه کلیک راست نموده و گزینه خواص را انتخاب کنید، برگه جدیدی به نام

به آن اضافه شد هاست که یک سری اطلاعات آماری را از وضعیت فعلی آن ارائه م یدهد. Subversion

توسط دستور خط فرمان زیر نیز قابل اجرا است: checkout عملیات

C:\> svn checkout file:///c:/svn/repo1 c:\project

و وارد کردن آن به سرور مخزن کد Client دریافت اطلاعات از یک

اگر مخزن کدی را بر روی سرور ایجاد کرده اید و قصد دارید پروژ های را از یک کلاینت به آن وارد نمائید بر روی پوشه آن کلیک راست

کرده و گزینه زیر را انتخاب کنید:

TortoiseSVN → Import

در صفحه بازه شده آدرس کلاینت عموما شبیه به لینک استاندارد زیر م یباشد:

svn://(servername)/(NameOfRepository)/(ProjectSource)/trunk

این عملیات با دستور خط فرمان زیر هم قابل انجام است:

C:\> svn import c:\temp\project file:///c:/svn/repo1 -m "Initial Load"

TortoiseSVN فصل ٢ – انجام کارهای متداول کنترلی با

٢۴

تحت کنترل قرار دادن یک فایل جدید

اگر فایل یا پوشه جدیدی را اخیرا ایجاد کرده اید، برای اینکه آنرا تحت کنترل مخزن کد قرار دهید، بر روی آن کلیک راست کرده و

گزینه زیر را انتخاب کنید:

TortoiseSVN → Add

پس از آن باید آنرا با مخزن کد هماهنگ نمائید. برای این منظور مجددا بر روی فایل یا پوشه کلیک راست نموده و مسیر زیر را طی

کنید:

TortoiseSVN → Commit

همچنین اگر علاقمند نیستید که یک یا چند فایل و یا حتی زیر پوشه در پوشه مورد نظر شما تحت کنترل قرار گیرند، بر روی آنها کلیک

راست کرده و گزینه زیر را انتخاب کنید:

TortoiseSVN → Add to ignore list

آنرا تحت کنترل قرار داده اید پشیمان شده اید، بر روی فایل کلیک Add یا اگر از اضافه کردن فایلی که هم اکنون با استفاده از گزینه

راست نموده و گزینه زیر را انتخاب نمائید:

TortoiseSVN → Undo add

تغییر نام یا حذف فایل

سبب از تحت کنترل خارج windows explorer لازم به ذکر است که تغییر نام یک فایل یا حذف آن به صورت مستقیم از طریق

شدن آن فایل م یگردد. بنابراین جهت تغییر نام و یا حذف یک فایل و ثبت این وقایع در مخزن کد از یکی از دو گزینه زیر پس از کلیک

راست بر روی آن فایل یا پوشه استفاده نمائید:

TortoiseSVN → Rename

TortoiseSVN → Delete

انتقال فایل به مکانی دیگر

یک فایل تحت کنترل نیز نباید به صورت متداول صورت گیرد. برای این منظور روی فایل کلیک راست نمائید، اکنون (move) انتقال

سپس از منوی ظاهر شده گزینه .(drag & drop) فایل را در همین حال به مکان مورد نظر کشیده و رها کنید

را جهت اتمام کار انتخاب نمائید. اکنون به پوشه اصلی پروژه بازگشته، بر روی آن کلیک SVN move versioned files here

.( شکل ۱ ) TortoiseSVN → Commit راست نمائید و سپس

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٢۵

با استفاده از کلیک راست ، کشیدن و رها کردن. Subversion شکل ۱– نحوه انتقال یا کپی یک فایل تحت کنترل

ارسال آخرین تغییرات انجام شده بر روی سور سکدها به سرور مخزن کد

پس از دریافت آخرین کدها از سرور و یا افزودن پروژه به یک مخزن کد (که در فصل یک توضیح داده شد)، با اعمال تغییرات بر روی

به رنگ قرمز درخواهد آمد و این مورد بیانگر تغییرات انجام شده توسط شما بر روی این windows explorer کدها، آیکون آنها در

فایل ها و یا پوش هها است (نسبت به نمونه همگام شده با سرور). برای همگام سازی سرور با تغییرات انجام شده و ارسال آخرین تغییرات به

سرور، بر روی فایل یا پوش ههای تغییر کرده کلیک راست کرده و سپس مسیر زیر را انتخاب کنید:

TortoiseSVN → Commit

در صفحه باز شده (شکل ۱۳ فصل یک)، توضیح درخوری را وارد کرده ، فایلهایی را که باید با سرور همگام شوند مرور کرده و سپس بر

کلیک نمائید. OK روی دکمه

شکل ۲– با هر بار هماهنگ سازی پروژه با مخزن کد، یک شماره بازنگری جدید دریافت خواهیم کرد.

استفاده نمائید. Update از گزینه Commit باید در نظر داشت اگر در یک تیم برنامه نویسی کار م یکنید همواره پیش از اجرای گزینه

زیرا اگر فایلی که شما بر روی آن مشغول به کار هستید توسط برنامه نویس دیگری تغییر یافته و با مخزن کد هماهنگ شده باشد، شما

تغییرات خود نخواهید بود (شکل ۳ ) ، زیرا نسخه شما یک نسخه قدیمی محسوب می شود. Commit مجاز به

TortoiseSVN فصل ٢ – انجام کارهای متداول کنترلی با

٢۶

استفاده کنید. Update از گزینه Commit شکل ۳– همیشه پیش از انتخاب گزینه

نامیده می شود و نسخه ای که شما هم اکنون مشغول ب هکار بر روی آن می باشید، Head ، آخرین نسخه ای که در مخزن کدها قرار دارد

جهت بررسی قدیمی بودن نگارش فایل شما، این دو نگارش را با هم مقایسه م یکند. SVN . نام دارد Base

اگر تعداد فایلهای زیادی را در لیستی که قرار است با مخزن کد همگام شود مشاهده می کنید، می توان موارد اضافی را در لیست موارد

صرفنظر شونده که در فصل قبل توضیح داده شد، اضافه نمائید.

به روز رسانی کپی محلی با آخرین تغییرات انجام شده توسط تیم برنامه نویسی

مشاهده نمائیم، بر روی فایل یا update برای اینکه تفاوت های نمونه موجود محلی را با آخرین نمونه موجود بر روی سرور پیش از

پوشه مورد نظر کلیک راست کرده و گزینه زیر را انتخاب کنید:

TortoiseSVN → Check for Modifications

جهت دریافت تغییرات اعمال شده توسط سایر اعضای تیم برنامه نویسی بر روی یک فایل یا یک پوشه، بر روی آن کلیک راست کرده و

مسیر زیر را طی کنید:

TortoiseSVN → Update

آخرین تغییرات اعمال شده را از سرور دریافت کرده و با فایل و یا فایلهای شما یکی م یکند. تنها update در این حالت دستور

درصورتیکه تداخلی وجود داشته باشد، پیغام خطایی را دریافت خواهید کرد (در مورد تداخلات در ادامه بحث خواهد شد).

مشاهده جزئیات تغییرات انجام شده بر روی یک فایل در نگار شهای مختلف آن

برای مشاهده لیست تغییرات انجام شده بر روی یک فایل ، بر روی آن کلیک راست کرده و مسیر زیر را طی نمائید:

TortoiseSVN → Show log

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٢٧

شکل ۴– مشاهده لیست تغییرات انجام شده بر روی یک فایل

در صفحه ظاهر شده (شکل ۴)، لیست تمامی تغییرات همگام شده با سرور را مشاهده خواهید کرد. برای مقایسه هر یک از موارد لیست

را انتخاب نمائید. compare with working copy شده با آخرین نسخه کاری موجود، بر روی آن مورد کلیک راست کرده و گزینه

Diff ریز تغییرات را مشاهده خواهید نمود. در اینجا از ابزار ، Diff در صفحه ای که ظاهر خواهد شد (شکل ۵)، با استفاده از الگوریت مهای

پیش فرض استفاده خواهد شد. اگر امکانات آن برای شما راضی کننده نیست می توانید از سایر ابزارهای خارجی دیگر نیز استفاده کنید.

انتخاب بهتری است. این برنامه را از آدرس زیر م یتوانید دریافت کنید: WinMerge برای نمونه، برنامه رایگان

http://www.winmerge.org/

شکل ۵- مشاهده ریز تغییرات انجام شده یک نگارش در مقایسه با نگارشی دیگر.

TortoiseSVN فصل ٢ – انجام کارهای متداول کنترلی با

٢٨

یکپارچه می کند. این مورد در صفحه تنظیمات برنامه TortoiseSVN هنگام نصب، خود را با WinMerge برنامه

.( قابل مشاهده است (شکل ۶ TortoiseSVN

است که نسخه آزمایشی آن از آدرس زیر قابل دریافت است (در راهنمای Beyond Compare مثالی دیگر برنامه غیر رایگان

نیز ذکر شده است): TortoiseSVN موجود در سایت آن نحوه یکپارچه سازی آن با

http://www.scootersoftware.com

. TortoiseSVN با WinMerge شکل ۶- یکپارچه شدن برنامه

نکته:

را نیز مهیا م یکند. اینکار به صورت MS-Word پس از نصب، امکان مقایسه دو نگارش مختلف فایل های TortoiseSVN

انجام خواهد شد و نیاز به تنظیم خاصی و یا برنامه جانبی اضافی ندارد. MS-Word خودکار با استفاده از امکانات درونی

SharePoint یک سازمان نیز استفاده کرد (همانند MS-Word می توان جهت مدیریت اسناد TortoiseSVN بنابراین از

مایکروسافت و کتابخانه اسناد آن با تمامی قابلی تهای آن اعم از نگهداری نسخ مختلف، تنظیم سطوح دسترسی، مشاهده تغییرات،

دسترسی تحت وب و غیره).

سایر فرمت هایی را که با رو شهای مشابه پشتیبانی م یشوند، در پوشه زیر م یتوانید مشاهده نمائید:

C:\Program Files\TortoiseSVN\Diff-Scripts

نحوه بازگشت به نگار شهای قبلی

می کند. پس crash شما از کار افتاده و (IDE) فرض کنید در حال کار بر روی یک پروژه هستید و ناگهان محیط مجتمع برنامه نویسی

با فرمی کاملا تخریب شده مواجه می شوید. در این حالت باید چکار کرد؟ سریعترین راه برای بازیابی آخرین ، IDE از گشودن مجدد این

مشخص می شود. در این موارد تنها کافی است بر روی فایل SVN کپی قابل استفاده فایل تخریب شده چیست؟ اینجاست که ارزش

کلیک راست کرده و مسیر زیر را انتخاب کنید:

TortoiseSVN → Revert

فایل تغییر کرده با آخرین نمونه هماهنگ شده با مخزن کدها به روز رسانی خواهد شد. ، revert پس از انتخاب گزینه

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٢٩

می توان ب هسادگی به نگار شهای قبلی بازگشت. revert شکل ۷– با استفاده از گزینه

اگر نیاز داشتید تا یک فایل یا یک پوشه را برای مثال به سه نگارش قبل که از نظر شما پایدارتر است بازگردانید، تنها کافی است با

از لیست ظاهر شده نگارش مورد نظر را انتخاب کنید، سپس بر روی آن کلیک راست ، TortoiseSVN در show log انتخاب گزینه

را انتخاب کنید. بدیهی است پس از انجام این بازگشت، نگارش های دیگر ارسال شده به revert to this revision کرده و گزینه

سرور محفوظ بوده و هر زمان که نیاز بود م یتوان به همین روش به آنها بازگشت نمود.

روش دیگر انجام اینکار استفاده از گزینه زیر است:

TortoiseSVN → Update to Revision

را انتخاب کنید، آخرین نگارش موجود در مخزن کد را دریافت Head Revision در اینجا نیز اگر ، Checkout همانند صفحه

عددی را وارد نمائید، به آن نگارش ویژه باز خواهید گشت. Revision خواهید کرد و اگر در قسمت

(conflicts) رفع تعارضات ، تداخل ها یا تصادم ها

با توجه به اینکه تداخلات در یک تیم نرم افزاری مبحثی شایع است، این مورد را به تفصیل مورد بررسی قرار خواهیم داد.

در یک تیم کاری ممکن است زمانیکه یک برنامه نویس مشغول تمام کردن وظایف محوله خویش است، برنامه نویس دیگری کار خویش

را به پایان رسانده و تغییرات جدید را به مخزن کد ارسال کرده باشد (شکل ۸). بنابراین همانطور که پیش تر نیز ذکر شد باید ابتدا آخرین

SVN . دریافت کرده و سپس نسبت به ارسال تغییرات خود اقدام نمائیم update تغییرات هماهنگ شده با سرور را با استفاده از گزینه

عملیات یکی کردن تمامی تغییرات موجود را به خوبی مدیریت کرده و در ای نباره مشکلی وجود ندارد (تمامی قسم تهای جدیدی که سایر

برنامه نوی سها بر روی آن کار کرده و با سرور هماهنگ کرد هاند به صورت خودکار به سورس کد موجود شما اضافه خواهد شد). اما مشکل

.( زمانی رخ خواهد داد که یک یا چند خط از کدهای درحال به روز رسانی شما با نمونه موجود در سرور مخزن کد متفاوت باشد (شکل ۹

یا تداخل به شما گزارش خواهد شد (شکل ۱۰ )، همچنین در کنار آیکون فایل نیز یک علامت تعجب ظاهر Conflict دراین حالت یک

خواهد شد.

TortoiseSVN فصل ٢ – انجام کارهای متداول کنترلی با

٣٠

. SVN شکل ۸- گزارش تداخل توسط

برای رفع تداخل گزارش شده، ابتدا باید با سایر اعضای تیم برنامه نویسی مشورت نموده و سپس نگارش مورد تائید را انتخاب نمود

.( (شکل های ۱۱ و ۱۲

پس از مشخص شدن نگارش مورد توافق، روی فایل کلیک راست کرده و گزینه زیر را انتخاب کنید:

TortoiseSVN → Edit conflicts

را use this text block روی سطر مورد نظر کلیک راست نموده و گزینه ،(TortoiseMerge در صفحه باز شده (توسط برنامه

انتخاب کنید (گزینه های دیگری مانند انتخاب کل فایل و یا انتخاب تغییرات دیگران نیز در اینجا مهیا است). فایل را ذخیره کرده و از

انتخاب نمائید (شکل SVN برنامه خارج شوید. اکنون مجددا روی فایل کلیک راست نموده و گزینه زیر را جهت اعلام رفع تعارض به

:(۱۳

TortoiseSVN → Resolved

.( با سرور هماهنگ کنید (شکل های ۱۴ و ۱۶ Commit و سپس Update در پایان فایل نهایی را با استفاده از گزین ههای

.( به این صورت سورس کد نهایی توافق شده با سرور هماهنگ گردیده و تداخل برطرف خواهد شد (شکل ۱۶

نمونه نهایی خود را با سرور هماهنگ ، A شکل ۹- در اینجا دو برنامه نویس سطر مشابهی از یک فایل را تغییر داده اند و برنامه نویس

کرده است.

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٣١

تعارض وجود دارد. A نخواهد بود زیرا در سطر یک با برنامه نویس update قادر به اجرای کامل گزینه B شکل ۱۰ - برنامه نویس

شکل ۱۱ - موارد گزارش شده به صورت تداخل را باید پس از هماهنگی با تیم برنامه نویسی برطرف نمود.

TortoiseSVN فصل ٢ – انجام کارهای متداول کنترلی با

٣٢

شکل ۱۲ - در اینجا پس از مشورت با سایر اعضای تیم، نگارش مورد توافق انتخاب م یگردد.

. SVN شکل ۱۳ - اعلام رفع اختلاف و تعارض به

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٣٣

. SVN شکل ۱۴ - به روز رسانی نسخه کاری با

. SVN شکل ۱۵ - هماهنگ کردن کد مورد توافق با

TortoiseSVN فصل ٢ – انجام کارهای متداول کنترلی با

٣۴

با سرور مخزن کد است. B شکل ۱۶ - نتیجه نهایی رفع تداخل، هماهنگ شدن سطر یک تغییر یافته توسط برنامه نویس

دو نکته مهم برنامه نویسی تیمی

استفاده کنید. (با دلیل این نکته در قسمت قبل آشنا شدیم) update از commit همیشه پیش از

همگام کنید. اگر کدی که مشغول به کار بر روی آن هستید دارای ایراد trunk تنها نمونه کاری مطمئن و آزمایش شده را با

ادغام (trunk) است بهتر است یک انشعاب جدید و ایزوله برای آن ایجاد کرده و پس از پایان کار آنرا با خط اصلی کاری

نمائید. (در مورد انشعابات در فصلی جداگانه به تفصیل بحث خواهیم کرد)

منع سایر کاربران از تغییر دادن یک فایل یا پوشه

سناریوی فوق در مورد فایلهای متنی کاملا کارآ است. اما فرض کنید که در پروژه شما یک فایل تصویری بایناری نیز موجود است. اگر

دو کاربر این فایل را تغییر دهند، امکان یکی کردن نتایج حاصله وجود ندارد و در این حالت یکی از آنها تغییرات خود را کاملا از دست

مایکروسافت). در این حالت تنها یک کاربر SourceSafe خواهد داد. در اینجا امکان قفل کردن یک فایل نیز فراهم شده است (همانند

می تواند مخزن کد را به روز رسانی کند.

را به آنها اعمال کرد. برای این منظور svn:needs-lock برای پیاده سازی عملیات قفل کردن یک فایل یا یک پوشه، باید خاصیت

روی فایل یا پوشه مورد نظر کلیک راست کرده و گزینه زیر را انتخاب کنید:

TortoiseSVN → Properties

کلیک نمائید تا بتوان خاصیت جدیدی را افزود (شکل ۱۷ ). در اینجا خاصیت New در صفحه باز شده بر روی دکمه

کلیک کنید. سپس این تغییر را با سرور هماهنگ نمائید. بر روی فایل کلیک OK را انتخاب نموده و بر روی دکمه svn:needs-lock

راست نموده و مسیر زیر را طی کنید:

TortoiseSVN → Commit

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٣۵

. svn:needs-lock شکل ۱۷ - افزودن خاصیت

پس از این هماهنگ سازی، آیکون فایل نیز تغییر خواهد کرد و فایل به حالت فقط خواندنی درخواهد آمد. اکنون اگر سایر کاربران جهت

استفاده کنند، آنها نیز این فایل را با آیکون تغییر یافته و به TortoiseSVN → Update دریافت آخرین نگارش موجود از گزینه

صورت تنها خواندنی مشاهده خواهند کرد.

:( در این حالت برای تغییر فایل باید بر روی فایل کلیک راست کرده و گزینه زیر را انتخاب نمود (و یا شکل ۱۸

TortoiseSVN → Get lock

اینبار کمی متفاوت است. Get lock شکل ۱۸ - محل قرارگیری گزینه

اکنون کاربر، مجاز به ویرایش فایل شده و پس از اعمال تغییرات خود م یتواند فایل را با سرور هماهنگ نماید. زمانیکه یک کاربر از گزینه

استفاده کند هرگونه سعی سایر کاربران دیگر جهت استفاده از این گزینه با یک خطا متوقف خواهد شد. get lock

در هر زمان تنها یک کاربر می تواند با فایل مورد نظر کار کند و تا زمانیکه ، svn:needs-lock بنابراین در حالت استفاده از خاصیت

استفاده TortoiseSVN → Release lock تغییرات کاربری که فایل را قفل کرده با سرور هماهنگ نشود یا آن کاربر از گزینه

نکند، کاربران دیگر موفق به قفل کردن فایل جهت اعمال تغییرات بر روی آن نخواهند شد.

نیز استفاده نکرد. در این حالت بازهم امکان قفل کردن فایل مهیا است اما پس از اعمال تغییرات svn:needs-lock می توان از گزینه

است، SVN و هماهنگ سازی آن با سرور، تمامی کاربران همانند قبل و مانند روش متداول کارکردن بدون قفل که حالت پیش فرض

می توانند از فایل استفاده نمایند.

TortoiseSVN فصل ٢ – انجام کارهای متداول کنترلی با

٣۶

اجباری کردن وارد نمودن توضیحات مربوط به هر هماهنگ سازی با سرور مخزن کد

برای این منظور برای روی پوشه اصلی پروژه کلیک راست کرده و سپس گزینه زیر را انتخاب کنید:

TortoiseSVN → Properties

.( کلیک نمائید تا بتوان خاصیت جدیدی را افزود (شکل ۱۹ New در صفحه باز شده بر روی دکمه

. tsvn:logminimize شکل ۱۹ – مقدار دهی خاصیت

Apply property recursively را از لیست انتخاب کرده و عدد مناسبی را وارد کنید. گزینه tsvn:logminimize خاصیت

را نیز انتخاب نمائید تا تغییرات به تمامی فایلهای پروژه اعمال گردد.

پس از این تغییر، تنها کاربرانی که حداقل ۲۵ کاراکتر توضیح در مورد تغییرات خود ارائه دهند، مجاز به هماهنگ کردن تغییرات خود با

هماهنگ سازی پس از ورود حداقل ۲۵ کاراکتر فعال می شود). OK سرور مخزن کدها خواهند شد (دکمه

اگر می خواهید کاربر بداند حداقل چه مقدار توضیحات را باید وارد کند، خاصیت زیر را نیز به روشی که گفته شده به عدد ۲۵ تنظیم کنید:

tsvn:logwidthmarker

صرفنظر کردن از یک سری از فای لها، تنها در پوشه ای خاص

توضیح داده شد. این تنظیمات در سطح کل تمامی پروژ ههای تحت (ignore list) در فصل قبل در مورد لیست موارد صرفنظر شونده

کنترل اعمال م یشود. اما اگر تنها یک پوشه خاص را مد نظر دارید م یتوان خاصیت زیر را همانند سایر موارد مطرح شده در این فصل به

:( آن پوشه افزود و مقدار دهی کرد (شکل ۲۰

svn:ignore

می تواند به این شکل باشد (هر سطر یک مقدار): VS.NET و مقدار پیشنهادی آن برای یک پروژه

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٣٧

*.suo

*.ncb

*.user

_ReSharper.*

[Bb]in

obj

[Dd]ebug

[Rr]elease

*.aps

*.eto

. svn:ignore شکل ۲۰ - مقدار دهی خاصیت

چه کسی کدام سطر را تغییر داده است؟

گاهی از اوقات تنها نیاز است بدانیم چه افرادی بر روی یک فایل کار کرده اند و همچنین چه تغییراتی را ایجاد نمود هاند. برای این منظور

بر روی فایل کلیک راست کرده و گزینه زیر را انتخاب کنید:

TortoiseSVN → Blame

در صفحه بازشده می توان مشخص کرد که از چه نگارشی به بعد این گزارش برای شما حائز اهمیت است. مقدار پیش فرض آن از اولین

نگارش م یباشد.

افزودن شماره بازبینی خودکار به فای لهای پروژه

وجود دارند که در صورت به کارگیری، پس از هماهنگ سازی فایل ها با مخزن کد، به SVN تعدادی واژه کلیدی از پیش تعریف شده در

به عبارتی شبیه عبارت $Id$ نیز گفته می شود. برای مثال برچسب RCS keywords عباراتی مشخص بسط داد خواهند شد. به آنها

بعد بسط داده م یشود:

TortoiseSVN فصل ٢ – انجام کارهای متداول کنترلی با

٣٨

$Id: NewDocument.txt 32 2008-09-20 18:04:02Z vahid $

پر کاربرد ترین واژ ههای کلیدی از این نوع به شرح زیر هستند:

•$Id$:

پس از بسط شامل نام فایل، شماره بازبینی، تاریخ ، زمان و نام نویسنده خواهد شد.

•$Date$:

پس از بسط تبدیل به زمان و تاریخ هماهنگ سازی با سرور مخزن کد می گردد.

•$Rev$:

پس از بسط شامل شماره بازبینی خواهد شد.

•$Revision$:

نام دیگری است برای شماره بازبینی

اگر هم اکنون این موارد را تست کنید کار نخواهند کرد. برای فعال سازی آنها باید به ترتیب زیر عمل نمود:

که Edit بر روی دکمه General در برگه .(TortoiseSVN → Settings) را باز کنید TortoiseSVN صفحه تنظیمات

بکار م یرود، کلیک کنید. در این فایل، تنظیمات موجود را فعال کنید (به صورت زیر): SVN جهت ویرایش فایل تنظیمات

[miscellany]

enable-auto-props = yes

[auto-props]

*.c = svn:eol-style=native

*.cpp = svn:eol-style=native

*.h = svn:eol-style=native

*.dsp = svn:eol-style=CRLF

*.dsw = svn:eol-style=CRLF

*.sh = svn:eol-style=native;svn:executable

*.txt = svn:eol-style=native

*.png = svn:mime-type=image/png

*.jpg = svn:mime-type=image/jpeg

*.cs = svn:eol-style=native

کلیک راست کرده و گزینه زیر را انتخاب کنید: (SVN پس از آن بر روی پوشه یا فایل مورد نظر (و تحت کنترل

TortoiseSVN → Properties

را انتخاب کرده و svn:eol-style کلیک نمائید تا بتوان خاصیت جدیدی را افزود. ابتدا خاصیت New در صفحه باز شده بر روی دکمه

وارد نمائید (گزینه اعمال به صورت بازگشتی را نیز انتخاب کنید). پس از اعمال این خاصیت، مجددا بر روی دکمه native مقدار آنرا

قرار دهید (گزینه Author Rev Id Date را بتوان اضافه نمود. مقدار آنرا مساوی svn:keywords کلیک کنید تا خاصیت new

$Id$ اعمال به صورت بازگشتی را نیز انتخاب کنید). پس از اعمال این موارد (شکل ۲۱ )، برای تست واژ ههای کلیدی بازبینی، برای مثال

کنید. اکنون فایل را گشوده و نتیجه تغییر را مشاهده نمائید. commit را به یکی از فای لها اضافه کرده و آنرا

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٣٩

. RCS keywords شکل ۲۱ – تنظیمات مربوط به

که پیشتر SVN اگر تمایل داشتید تا این واژ ههای کلیدی را به صورت عمومی به تمامی پروژ هها اضافه نمائید، کافی در فایل تنظیمات

در مورد فعال سازی خطوط آن توضیح داده شد، خطوط مورد نظر را به صورت زیر اصلاح نمائید، برای مثال:

*.c = svn:eol-style=native;svn:keywords=Author Rev Id Date

به این صورت دیگر نیازی به افزودن خواص به فای لها یا پوش ههای پروژه ها نیست و این موارد به صورت عمومی اعمال م یشوند.

استفاده از این نوع شمار ههای خودکار در سور س کدهای برنام هها به صورت توضیحات آنها بسیار متداول هستند.

(carriage return + line feed) در ویندوز eol است و همانطور که م یدانید end of line در تنظیمات فوق مخفف eol

بر اساس نوع سیستم عامل موجود رفتار SVN برنامه ، native متفاوت هستند. با انتخاب مقدار آن مساوی (line feed) و لینوکس

خواهد کرد.

SVN Cleanup

کند یا پروسه به هر نحوی نیمه کاره قطع گردد ، م یتوان با استفاده از دستور crash اگر در حین کار با مخزن کد، سیستم عامل

وضعیت را حالت مطلوبی بازگشت داد. برای این منظور بر روی پوشه پروژه کلیک راست کرده و گزینه زیر را انتخاب ، svn cleanup

کنید:

TortoiseSVN → clean up

به این صورت تمامی کارهای نیمه کاره به پایان رسیده و تمامی قف لهای ایجاد شده نیز برطرف م یشوند.

SVN export

می توان یک کپی از نسخه کاری svn export به یک مخزن کد آشنا شدید. با استفاده از دستور import در ابتدای فصل با عملیات

به دیگران ارائه داد و بدیهی است در این حالت امکان اجرای سایر دستورات (_svn یا .svn را بدون پوشه های مدیریتی آن (پوشه های

میسر نخواهد بود. برای انجام اینکار بر روی پوشه پروژه کلیک راست کرده و گزینه زیر را انتخاب نمائید: svn مربوط به

TortoiseSVN → export

TortoiseSVN فصل ٢ – انجام کارهای متداول کنترلی با

۴٠

(patches) ایجاد و اعمال وصل هها

اگر به روند کاری پروژه های سورس باز دقت کنید، همیشه عده ای هستند که تغییراتی را جهت بهبود کارکرد و یا افزودن یک ویژگی

به تیم مدیریتی پروژه ارائه می دهند. تیم مدیریتی پس از بررسی وصله و (patch) جدید به پروژه تهیه و آنرا به صورت یک فایل وصله

پذیرش آن، آنرا به پروژه اعمال می کنند. این فایل وصله حاوی دستور العمل هایی است جهت اعمال تغییرات صورت گرفته بر روی یک یا

چندین فایل پروژه. به همین جهت برای کار با این نوع تیم ها مرسوم نیست که کل پروژه را فشرده کرده و تمامی فایل ها را با محتویات

کامل آن ها جهت بررسی تیم مدیریتی پروژه ارائه دهند. آنها (افرادی خارج از تیم اصلی برنامه که دسترسی مستقیمی به مخزن کد جهت

ارائه ، (patch اعمال تغییرات ندارند) تنها فایلی را که حاوی تغییرات انجام شده بر روی تعدادی از فایلهای پروژه است (فایل وصله یا

می نمایند.

برای ایجاد فایل وصله، بر روی پوشه پروژه کلیک راست کرده و گزینه زیر را انتخاب کنید:

TortoiseSVN → Create patch…

کلیک کنید. در OK در اینجا ابتدا فای لهای مورد نیاز را که در تهیه فایل وصله نقش خواهند داشت انتخاب کرده و سپس بر روی دکمه

ادامه محل ذخیره سازی فایل وصله پرسیده خواهد شد.

تیم مدیریتی برای اعمال این فایل وصله، باید بر روی پوشه پروژه کلیک راست کرده و گزینه زیر را انتخاب کنند:

TortoiseSVN → Apply patch…

ظاهر شده و به صورت خودکار مسیر فایل وصله جهت گشوده شدن در برنامه پرسیده TortoiseMerge با انتخاب این گزینه برنامه

خواهد شد. پس از گشودن فایل وصله، لیست فایلهایی که تغییر خواهند کرد نمایش داده می شود. با دوبار کپی بر روی نام هر فایل،

تفاوت های دو فایل قابل مشاهده خواهند بود. اگر علاقمند بودید که تمامی تغییرات را یکجا اعمال نمائید، تمامی فایلها را انتخاب کرده و

را انتخاب کنید. یا برای اعمال تغییرات تنها بر روی یک فایل patch all سپس بر روی لیست فای لها کلیک راست نموده و گزینه

را انتخاب کنید. همچنین patch selected گزینه ، file patches انتخابی، پس از کلیک بر روی نام فایل در لیست فایلهای پنجره

اعمال کنترل ریزتری نیز در اینجا مهیا است. برای مثال خطوطی که پس از وصله شدن به فایل اضافه خواهند شد با علامت + در برنامه

نمایش داده می شوند. اگر نیاز بود که سطری اعمال نگردد، بر روی علامت + دوبار کلیک نمائید تا حالت آن به TortoiseMerge

علامت منفی تغییر یابد.

CodePlex و SourceForge برای کار با SVN استفاده از

برای مدیریت یک پروژه سورس باز می توان از سایت هایی که برای این منظور طراحی شده اند استفاده کرد. برای مثال

از لحاظ پذیرش پروژه های مختلف تحت سیست م عامل ها و زبان های sourceforge . CodePlex.com و یا sourceforge.net

بیشتر به توسعه سورس باز برنام ههایی مبتنی بر دات نت مایکروسافت اختصاص CodePlex . برنامه نویسی گوناگون بسیار متنوع است

جهت توسعه گران فراهم آورنده اند که در ادامه قصد داریم SVN دارد. خوشبختانه هر دو سایت امکان مدیریت پروژه نرم افزاری را توسط

به این موضوع بپردازیم.

SourceForge برای کار با TortoiseSVN الف) استفاده از

قبل از هر کاری مدیر پروژه باید شما را بعنوان یکی از اعضای گروه اضافه نماید تا مجوز هماهنگ سازی کدهای خود را با

پیدا نمائید. SourceForge مخزن کد در

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۴١

را انجام دهیم. نکاتی که در اینجا وجود دارند همانند Checkout سپس باید پوش های محلی را جهت پروژه ایجاد کرده و اولین

است و نکته جدید خاصی وجود ندارد. در اینجا آدرس مخزن کد به صورت زیر خواهد TortoiseSVN سایر اعمال متداول با

دقت نمائید): https بود (به

https://{project unix name}.svn.sourceforge.net/svnroot/{project unix name}

پروژه به صورت زیر است: trunk و یا برای مثال آدرس

https://{project unix name}.svn.sourceforge.net/svnroot/{project unix name}/trunk

شروع نمائید در غیراینصورت با trunk حتما از Checkout نکته ای را که باید بخاطر داشت این است که برای شروع کار

انبوهی از انشعابات و برچسب ها که در طول مدت زمان انجام پروژه ایجاد شد هاند مواجه خواهید شد.

از شما خواهد خواست که نام کاربری و کلمه عبور خود را جهت اتصال به مخزن کد وارد نمائید. TortoiseSVN ، در ادامه

مدتی صبر نمائید تا فای لها از سرور به نسخه کاری شما منتقل شوند. •

از این مرحله به بعد روال کاری همانند روال کاری متداول با یک پروژه تحت کنترل مخزن کد است. همیشه ابتدا با استفاده از

تغییرات خود اقدام نمائید. commit آخرین تغییرات سایر اعضای گروه را دریافت کرده و سپس نسبت به update گزینه

همچنین دقت نمائید که سرور سور سفورج غیرویندوزی است و نسبت به کوچکی و بزرگی نام فای لها حساس است.

وصله) ) patch لازم به ذکر است برنامه نویس های علاقمندی که خارج از تیم مدیریتی پروژه قرار دارند نیز می توانند فایلهای

سایت ارسال نمایند. همچنین این برنامه نوی سها م یتوانند دسترسی فقط خواندنی tracker → patches خود را در قسمت

نیز به مخزن کد داشته باشند (بدون ارائه نام کاربری و کلمه عبور).

CodePlex برای کار با SVN ب) استفاده از

بدون استفاده از برنامه CodePlex را جهت کار با SVN مدتی است مایکروسافت امکان استفاده از یک کلاینت

و SVN برنامه ای است که به صورت یک پروکسی بین کلاینت SvnBridge . فراهم کرده است codeplex.com/SvnBridge

و TortoiseSVN مایکروسافت عمل می کند. اما با اقداماتی که صورت گرفته است با استفاده از Team Foundation Server

نیز ارتباط برقرار نمود: CodePlex بدون نصب هیچگونه پروکسی خاصی با استفاده از آدرس زیر م یتوان با سایت

https://<projectname>.svn.codeplex.com/svn

می توان دسترسی فقط خواندنی را نیز به مخزن کد داشت (در آدرس فوق تنها TortoiseSVN برنامه Repo-browser با کمک

کافی است نام پروژه مورد نظر خود را وارد کنید (شکل ۲۲ )). برای مثال آدر سهای زیر را آزمایش نمائید:

https://svnbridge.svn.codeplex.com/svn

https://aspnet.svn.codeplex.com/svn/MVC

https://mvcsamples.svn.codeplex.com/svn

است و باید ابتدا پوشه ای را ایجاد کرده و پروژه را از سرور مخزن کد SourceForge مراحل بعدی کار تقریبا همانند کار با

نمائید و سپس مشغول به همکاری با تیم برنامه نویسی شوید. Checkout

TortoiseSVN فصل ٢ – انجام کارهای متداول کنترلی با

۴٢

. Repo-browser توسط CodePlex شکل ۲۲ - مرور یک پروژه در سایت

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۴٣

Branching & Tagging فصل ۳ – آشنایی با مفاهیم

شکل ۱– جهت بررسی و آزمایش ویژگی های پیشنهادی جدید در یک پروژه م یتوان انشعابی جدید را معرفی نمود.

مقدمه:

درحقیقت کپی هایی از پوشه های موجود پروژه هستند که در پوشه های ویژه ای قرار (branches) و انشعابات (tags) برچسب ها

می گیرند تا سایر کاربران متوجه ویژه بودن آنها شوند.

موفق، یک شماره commit پس از هر SVN . عموما از برچس بها جهت مشخص کردن یک نگارش ویژه پروژه استفاده م یشود

بازنگری خودکار را به عملیات رخ داده انتساب می دهد. با استفاده از برچسب ها دیگر نیازی نخواهد بود تا این شماره های بازنگری را

است. SVN به خاطر بسپارید و بدانید که برای مثال سومین ارائه عمومی برنامه مطابق چندمین شماره بازنگری

انشعابات اندکی پیچیده تر هستند. بجای ایجاد یک کپی و رها کردن آن به وضع خود (همانند مبحث برچسب ها)، انشعابات بدین جهت

انجام دهید اما این تغییرات SVN ایجاد می شوند که قابل تغییر باشند. گاهی از اوقات می خواهید تغییرات آزمایشی خود را تحت نظارت

نباید وارد نسخه اصلی کاری موجود در سرور مخزن کد گردد و سایر برنامه نویس های تیم را دچار اشتباه سازد. عموما نگار شهای آمازیشی

که جهت برطرف کردن خطاها با سرور هماهنگ می شوند از این دست هستند. پس از اطمینان حاصل کردن از صحت عملیات، می توان

ادغام کرد. trunk این انشعابات را با نگارش اصلی موجود در

پروژه (که سایر اعضای تیم هم اکنون مشغول به کار بر روی آن هستند) از هرگونه trunk هدف از این انشعابات، تر و تازه نگه داشتن

آزمایش و یا کدهای موقتی است.

Branching & Tagging فصل ٣ – آشنایی با مفاهیم

۴۴

. SVN شکل ۲– برچسب دهی به شمار ههای خودگار بازنگری در

TortoiseSVN ایجاد برچسب ها و انشعابات با استفاده از

برای ایجاد یک برچسب یا انشعاب بر روی فایل یا پوشه مورد نظر کلیک راست کرده و گزینه زیر را انتخاب کنید:

TortoiseSVN → Branch/Tag

یک برچسب یا انشعاب جدید ایجاد ، branches انتخاب کنید یا tags شکل ۳ را پوشه To URL سپس بسته به اینکه مسیر

در انتهای آدرس، جهت ایجاد این برچسب جدید اضافه شده است). همانطور که پیش تر نیز ذکر شد، برچسب r می شود (برای مثال اینجا 1

یا انشعاب هر دو یک کپی از پوشه یا فایل موجود هستند اما مفهوم برچسب، یک کپی فقط خواندنی است و از انشعاب برای آزمایش

ایده های جدید و یا رفع یک سری از با گها و سپس ادغام آن با شاخه اصلی پروژه استفاده می شود.

.( مراجعه کرد (شکل ۴ TortoiseSVN برنامه repo-browser برای تست صحت عملیات صورت گرفته م یتوان به

شکل ۳- ایجاد یک برچسب جدید.

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۴۵

پس از ایجاد اولین برچسب. repo-browser شکل ۴- نمایی از

سوئیچ کردن بین انشعابات

تا بدینجا موفق به ایجاد یک برچسب یا انشعاب جدید شده ایم. اما اگر تغییرات انجام شده را با سرور هماهنگ کنیم مجددا به انشعاب

اضافه خواهند شد. بنابراین نیاز است تا به انشعاب ایجاد شده سوئیچ کرد. برای این منظور بر روی پوشه پروژه یا پوشه و trunk اصلی یا

فایل مورد نظر کلیک راست کرده و گزینه زیر را انتخاب کنید:

TortoiseSVN → switch

شکل ۵- سوئیچ کردن به یک انشعاب

در انتهای آدرس، جهت ایجاد این انشعاب جدید اضافه b در صفحه باز شده (شکل ۵)، آدرس انشعاب مورد نظر را وارد (برای مثال اینجا 2

کلیک کنید. از این پس هرگونه هماهنگ سازی با مخزن کد به OK شده است)، شماره بازنگری مناسبی را انتخاب کرده و بر روی دکمه

آن مشخص می شود). بدیهی است در هر زمانی می توان URL در قسمت commit این انشعاب منقل خواهد شد (این مورد در صفحه

از یک انشعاب به انشعاب دیگری سوئیچ کرد.

استفاده شود، تغییر مکان مخزن کد برای مثال به سروری دیگر باشد. switch حالت دیگری که ممکن است از

برای مشاهده نمودار انشعابات پروژه در زما نهای مختلف، بر روی پوشه مورد نظر کلیک راست کرده و گزینه زیر را انتخاب کنید:

TortoiseSVN → Revision graph

Branching & Tagging فصل ٣ – آشنایی با مفاهیم

۴۶

ادغام نتایج انشعابات با انشعاب اصلی پروژه

با توجه به اینکه انشعابات خطوط جدای کاری از خط اصلی پروژه محسوب می شوند، پس از پایان عملیات مربوطه، نیاز به ادغام نتایج

آنها با خط اصلی کاری پروژه وجود خواهد داشت.

شکل ۶– ادغام نتایج یک انشعاب با خط اصلی کاری پروژه.

برای این منظور بر روی پوشه یا فایل مورد نظر کلیک راست کرده و گزینه زیر را انتخاب کنید:

TortoiseSVN → Merge

مربوطه باز خواهد شد. این صفحه سه گزینه دارد که به بررسی آنها خواهیم پرداخت: wizard سپس صفحه

Merge a range of revisions •

در این حالت برای مثال م یتوان تغییرات انجام شده از بازنگری ۲ تا ۵ یک انشعاب را دریافت کرده و آنها را با انشعاب اصلی (یا

آدرس انشعابی را وارد کنید که قرار است تغییرات ، From انشعابی دیگر) ادغام کرد (شکل ۷). در صفحه مربوطه در قسمت

صفحه ادغام، لیست شماره های Revision range to merge موجود در آن با نسخه کاری شما ادغام شود. در قسمت

Reverse منتقل شوند ، وارد نمائید. اگر در این صفحه گزینه From بازنگری را که باید با یکدیگر ادغام شده و به گزینه

را انتخاب کنید، تمامی تغییرات پیشین بر اساس باز ه وارد شده به حالت اول باز خواهند گشت (همان مبحث merge

.(revert

Reintegrate a branch •

فرض کنید انشعابی را جهت ایجاد یک ویژگی جدید در برنامه ایجاد کرد هاید. در طی توسعه این انعشاب، هر روز آنرا با انشعاب

اصلی به روز خواهید کرد تا آخرین تغییرات را نیز در این انشعاب ویژه داشته باشید. پس از پایان کار، ادغام و همگام سازی

نهایی را انجام خواهید داد (شکل ۸). در اینجا با توجه به همگام بودن این انشعاب با انشعاب اصلی که در طی روزهای متوالی

صورت گرفته، پس از ادغام، دیگری نیازی به آن نخواهد بود و قابل حذف است (زیر اکنون هر دو انعشاب یکسان هستند). در

آدرس انشعابی است که باید ادغام گردد. ، From URL این حالت گزینه

Merge two different trees •

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۴٧

این مورد حالت عمومی گزینه قبل است. از این حالت برای ادغام یک انشعاب و اعمال تغییرات آن به انشعاب اصلی استفاده

صفحه مربوطه باید آدرس From می شود (شکل ۹). نکته مهمی که در اینجا باید به آن دقت داشت این است که در قسمت

آدرس مربوط به انشعاب ادغام To نقطه آغازین اعمال تغییرات انشعاب است). در قسمت trunk وارد شود (زیرا trunk

شونده را وارد کنید.

مربوط به تنظیمات ادغام است. پیش فرض های این wizard پس از انتخاب یکی از گزین ههای فوق و تکمیل فرم مربوطه، صفحه بعدی

صفحه عموما صحیح بوده و هدف اصلی ادغام است.

شکل ۷- ادغام بازه ای از بازنگر یها

شکل ۸- یکپارچگی مجدد با یک انشعاب

Branching & Tagging فصل ٣ – آشنایی با مفاهیم

۴٨

شکل ۹- ادغام دو انشعاب

عملیات ادغام همیشه با موفقیت به پایان نخواهد رسید و ممکن است تداخل هایی نیز وجود داشته باشد. در صورت بروز تداخل شکل ۱۰

نمایان خواهد شد.

شکل ۱۰ – بروز تداخل در اثر ادغام

در این حالت عملیات رفع تداخل همانند مباحث پیشین باید دنبال گردد.

نکته:

فرض کنید انشعاب جاری شما، یکی از انشعابات فرعی پروژه است (توسط گزینه سوئیچ آنرا انتخاب کرد هاید) و اکنون کار این مرحله به

را نگه داشته و بر روی پوشه پروژه کلیک راست shift گزینه ساده تری نیز وجود دارد. دکمه trunk پایان رسیده است. برای ادغام آن با

کنید. سپس گزینه زیر را انتخاب نمائید:

TortoiseSVN → Merge reintegrate...

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۴٩

سپس صفحه ساده زیر نمایان خواهد شد (شکل ۱۱ ) و در یک مرحله کار به پایان خواهد رسید.

. trunk شکل ۱۱ - ادغام سریع یک انشعاب با

خط مش یهای متداول در ایجاد انشعابات

ایجاد انشعابات هنگام کار در یک تیم، بازدهی اعضای تیم را بدلیل کار کردن در انشعابی ایزوله بالا م یبرد اما مسایل همراه با ادغام های

آتی را به همراه خواهد داشت. به همین جهت تیم های مختلف خط مشی های مختلفی را جهت ایجاد انشعابات دنبال م یکنند که در ادامه

به آنها خواهیم پرداخت:

الف) ایجاد انشعاب به ازای هر ارائه عمومی برنامه

یکی از متداول ترین خط مشی های ایجاد انشعاب، ایجاد انشعاب به ازای هر ارائه عمومی برنامه است که در شکل ۱۲ نشان داده شده

است. هر انشعاب شامل تمامی تلا شهای یک تیم در هنگام ارائه عمومی برنامه در آن نگارش خاص است. این انشعاب پس از ایجاد

خاتمه یافته تلقی شده و از آن جهت نقطه آغازین و به روز رسانی اولیه نگارشی جدید استفاده م یشود. بنابراین بهتر است این نوع انشعابات

مشخص نمود. Tag با یک SVN را در فرهنگ

شکل ۱۲ - ایجاد انشعاب به ازای هر ارائه عمومی برنامه.

Branching & Tagging فصل ٣ – آشنایی با مفاهیم

۵٠

ب) ایجاد انشعاب به ازای هر فاز پروژه

در این روش مطابق و به ازای فازهای تعریف شده پروژه، انشعابی جدید جهت توسعه، آزمایش و تکمیل آن مرحله ایجاد گردیده و پس

از اتمام کار با خط تولید ادغام می گردد (شکل ۱۳ ). در حین توسعه در این انشعاب، برنامه نویس همواره خود را با خط اصلی تولید به روز

نگه خواهد داشت.

شکل ۱۳ - ایجاد انشعاب به ازای هر فاز پروژه.

ج) ایجاد انشعاب به ازای هر فعالیت جدید

جهت جلوگیری از تداخل وظایف محوله (یا فعالیت ها) و بالا بردن بهره وری تیمی، م یتوان به ازای هر فعالیت جدید، انشعابی را ایجاد

نموده و سپس نتایج آنرا با خط تولید ادغام نمود (شکل ۱۴ ). این انشعابات باید کوتاه مدت بوده و نتایج آن سریعا با خط تولید ادغام شوند تا

هزینه ادغام ها بیشتر از منافع این روش نگردند.

شکل ۱۴ - ایجاد انشعاب به ازای هر فعالیت جدید.

د) ایجاد انشعاب به ازای هر زیر سیستم جدید

پس از طراحی سیستم، به ازای هر کامپوننت یا زیر سیستم تعریف شده م یتوان یک انشعاب جدید تعریف، کار را در هر انشعاب به صورت

ایزوله به پایان رساند و سپس نتیجه را با خط تولید ادغام کرد (شکل ۱۵ ). در این حالت کنترل بهتری را م یتوان بر تک تک اجزای سیستم

داشت.

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۵١

شکل ۱۵ - ایجاد انشعاب به ازای هر زیر سیستم جدید.

ه) ایجاد انشعاب به ازای فناور یهای مختلف

اگر سیستم شما قرار است تحت سکوهای کاری مختلف کار کند، م یتوان به ازای هر کدام یک انشعاب جدید تعریف نمود و همچنین موارد

توسعه داد (شکل ۱۶ ). در این حالت هیچگاه ادغام انشعابات مد نظر نیست. common مشترک را در انشعاب

شکل ۱۶ - ایجاد انشعاب به ازای فناور یهای مختلف.

با محیط های توسعه مجتمع SVN فصل ۴ – یکپارچگی

۵٢

با محیط های توسعه مجتمع SVN فصل ۴ – یکپارچگی

مقدمه:

را در ویندوز بسیار ساده کرده است اما نیاز به یکپارچگی محیط های توسعه مجتمع SVN استفاده از TortoiseSVN هر چند

بیش از پیش احساس windows explorer جهت بالا بردن کارآیی برنامه نوی سها بدون مراجعه مکرر آنها به SVN با (IDE)

و سایر محی طهای توسعه مجتمع توسعه یافت هاند که در این فصل به VS.Net جهت (Add-in) می شود. بدین منظور افزودنی هایی

معرفی آنها خواهیم پرداخت.

Visual Studio.Net با SVN الف) یکپارچگی

Garry Broadsword's Add-on : ساده ترین راه حل موجود

به شمار می آید را از آدرس زیر می توانید تهیه کنید: TortoiseSVN برای (wrapper) این افزودنی که در حقیقت محصور کنند های

http://garrys-brain.blogspot.com/2007/07/tortoisesvn-and-visual-studio.html

، Commit خواهید داشت. این موارد شامل VS.Net را در TortoiseSVN با استفاده از این افزودنی تقریبا تمامی توانایی های

، Repository ، Resolve ، Edit Conflicts ، Modifications ، Revert ، Blame ، Diff ، History ، Update

می باشند. متاسفانه مبحث تغییر رنگ آیکو نهای فایل ها Settings و Branch/Tag ، Add Solution ، Project History

پشتیبانی نخواهند شد و اگر VS.Net نمونه آنرا دیده اید) به این صورت در windows explorer در TortoiseSVN (که توسط

این مورد برای شما اهمیتی ندارد، این افزودنی رایگان، ساده ترین و سب کترین افزودنی موجود (از لحاظ مصرف منابع سیستمی) جهت کار

می باشد. VS.Net در SVN با

برای نصب آن به صورت زیر عمل کنید:

مورد استفاده شما، مقدار متغیر VS.Net را گشوده و بنابر نگارش SubversionInstall.vbs ۱- فایل

تنظیم شده VS.Net را ویرایش کنید (به صورت پیش فرض برای 2008 strVisualStudioVersionNumber

را strTortoiseSVNBin را در مکان پیش فرض آن نصب نکرد هاید، مقدار متغیر TortoiseSVN است). همچنین اگر

نیز ویرایش نمائید. اکنون این اسکریپت را اجرا نمائید (روی آن دوبار کلیک کنید یا بر روی آن کلیک راست نموده، گزینه

کلیک کنید). Microsoft windows based script host را انتخاب کرده و سپس بر روی Open with

و گزینه VS.Net در tools موجود را با استفاده از منوی vssettings خود، فایلهای VS.Net ۲- بسته به نگارش

.( معرفی نمائید (شکل ۱ VS.Net به ، Import and Export Settings

های دیگر نیز استفاده شده است. IDE نتیجه این عملیات را در شکل ۲ ملاحظه می کنید. از همین ایده در

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۵٣

. VS.Net به vssettings شکل ۱- معرفی فایلهای

. VS.Net به Subversion شکل ۲- افزوده شدن منو و نوار ابزار

AnkhSVN : جامع ترین راه حل سورس باز موجود

بشمار می رود. این افزودنی را از آدرس زیر SVN و VS.Net جامع ترین افزودنی سورس باز موجود جهت یکپارچگی AnkhSVN

می توانید دریافت نمائید:

http://ankhsvn.open.collab.net/

در اختیار شما قرار م یدهد (بعلاوه VS.Net نمی باشد و امکانات مشابهی را در TortoiseSVN برای استفاده از آن نیازی به نصب

مراجعه کرده و موارد مربوط VS.Net در toolbars گزینه View امکان تغییر خودکار آیکون های فای لها). پس از نصب آن به منوی

را انتخاب نمائید تا نوار ابزار آن قابل استفاده گردد. Source control به

کلیک solution explorer بر روی نام پروژه در لیست SVN استفاده از این افزودنی بسیار ساده است. برای افزودن یک پروژه به

را انتخاب کنید (در اینجا فرض بر این است که ایجاد مخزن کد را پیشتر Add solution to subversion راست کرده و گزینه

آنرا باید وارد کرد). این افزودنی پس از افزودن یک فایل به پروژه، کار افزودن آن فایل را به URL انجام داده اید و در صفحه ظاهر شده

با محیط های توسعه مجتمع SVN فصل ۴ – یکپارچگی

۵۴

نیز به صورت خودکار انجام می دهد و نیازی به دخالت برنامه نویس نخواهد بود و یا برای مثال پس از تغییر هر فایل می توان بر SVN

افزوده شده است، انتخاب نمود. سایر موارد عنوان شده در VS.Net را که اکنون به Commit روی آن کلیک راست نمود و گزینه

فصل های پیشین نیز به همین ترتیب در دسترس خواهند بود.

VisualSVN : بهترین راه حل تجاری موجود

با SVN رایگان آشنا شدید. همان شرکت محصول دیگری را نیز جهت یکپارچگی VisualSVN Server از فصل های قبل با

به شمار VS.Net در SVN ارائه داده است که غیررایگان است اما مطابق شواهد موجود پرکاربردترین افزودنی جهت کار با VS.Net

را TortoiseSVN است بنابراین جهت استفاده از آن حتما باید TortoiseSVN محصور کننده توانایی های Add-in می رود. این

بود، توسط TortoiseSVN پیشتر نصب کرده باشید. برخلاف اولین راه حل عنوان شده این فصل که آن نیز محصور کننده توانای یهای

windows در TortoiseSVN نیز مهیا است (همانند VS.Net امکان تغییر خودکار آیکون های فایل ها در VisualSVN

و این مورد کمک شایانی را در مورد درک وضعیت فعلی فایلهای پروژه از نظر هماهنگی با مخزن کد به برنامه نویس خواهد (explorer

.( کرد (شکل ۳

هر چند نگار شهای اخیر این افزودنی امکانات بیشتری نسبت به یک محصور کننده صرف را ارائه داده اند. برای مثال گزینه

و tags ، trunk آن، به سادگی تمامی مراحل ایجاد مخزن، ایجاد سه پوشه استاندارد add solution to subversion

را به صورت خودکار انجام م یدهد. بدیهی است پس از این عملیات یکبار باید عملیات check out و check in مباحث ، Branches

کلیک راست کرده و گزینه VS.Net را انجام داد تا پروژه با مخزن کد هماهنگ گردد. برای این منظور روی نام پروژه در commit

فایل ها توسط Commit را که پس از نصب این افزودنی اضافه است شده است، انتخاب نمائید. صفحه آشنای Commit

ظاهر شده و باقی قضایا همانند مطالب عنوان شده در فص لهای قبل است. TortoiseSVN

که بیانگر وضعیت هماهنگی آنها با مخزن کد است. VisualSVN توسط VS.Net شکل ۳– نمایی از تغییر آیکو نهای فای لها در

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۵۵

Delphi با SVN ب) یکپارچگی

File Browser استفاده از

در دلفی، استفاده از گزینه زیر است: TortoiseSVN ساده ترین راه حل استفاده از توانای یهای

View menu → File Browser

خواهید داشت و همچنین مبحث تغییر آیکو نهای TortoiseSVN دسترسی کاملی به منوهای IDE به این صورت از درون

نیز در اینجا کاملا فعال است. TortoiseSVN فایل ها توسط

تنها نکت های که باید در مورد دلفی ب هخاطر سپرد، مبحث فای لهای صرفنظر شونده است که پیشتر در مورد آنها بحث شد. در غیراینصورت

هربار با انبوهی از فای لهای غیر ضروری که باید به مخزن کد وارد شوند روبرو خواهید شد.

DelphiAddinForTortoiseSVN پروژه سورس باز

عمل می کند و محصور کننده VS.Net این افزودنی محیط توسعه مجتمع دلفی (شکل ۴)، همانند اولین افزودنی معرفی شده برای

است. برای دریافت سورس کد آن به آدرس زیر مراجعه نمائید: TortoiseSVN توانایی های

http://delphiaddinfortortoisesvn.tigris.org/

برای محیط توسعه مجتمع دلفی. TortoiseSVN شکل ۴- افزودنی

جدید را در دلفی package را از آدرس فوق دریافت کنید. یک پروژه icons.res و tsvnWizard.pas برای نصب آن دو فایل

را انتخاب کنید. Install کلیک راست نموده و گزینه IDE آغاز کرده و این دو فایل را به آن اضافه نمائید. سپس بر روی پروژه در

نمونه آنرا دیده اید) به این windows explorer در TortoiseSVN متاسفانه مبحث تغییر رنگ آیکون های فایل ها (که توسط

صورت در دلفی پشتیبانی نخواهند شد.

delphisvn پروژه سورس باز

نیز برای دلفی موجود است که آنرا م یتوان از آدرس زیر دریافت کرد: delphisvn افزودنی دیگری به نام

http://sourceforge.net/projects/delphisvn/

با محیط های توسعه مجتمع SVN فصل ۴ – یکپارچگی

۵۶

نداشته و توانای یهای آنرا بازنویسی کرده است. TortoiseSVN این افزودنی نیازی به نصب

JCL Version افزودنی

دلفی اضافه می کند که آن نیز IDE به JCL Version افزودنی را به نام ، jedi control library یا jcl کتابخانه معروف

است. این کتابخانه از آدرس زیر قابل دریافت است: TortoiseSVN محصور کننده توانایی های

http://homepages.codegear.com/jedi/jvcl/

IDE در Tools menu استفاده از

امکان افزودن آیتم های جدیدی را نیز برای شما فراهم کرده است. نحوه افزودن آیتم های مربوط به tools منوی استاندارد

به این منو در آدرس زیر بر شمرده شده است: TortoiseSVN

http://delphi.wikia.com/wiki/Adding_TortoiseSVN_to_the_Tools_menu

Eclipse با SVN ج) یکپارچگی

نیز افزودنی سورس بازی در آدرس زیر قابل دریافت است: Eclipse برای

http://subclipse.tigris.org/

بهتر است اطمینان حاصل نمائید که اینکار پیشتر صورت نگرفته باشد. برای این منظور مسیر زیر را بررسی subclipse پیش از نصب

کنید:

Help → About Eclipse SDK → Plugins

این پلاگین را نیز به صورت خودکار نصب م یکند. PHPEclipse برای مثال

NetBeans با SVN د) یکپارچگی

به صورت پیش فرض نصب نشد ه است، اما از نگارش ۶ به بعد آن، این پشتیبانی به صورت NetBeans در 5.5 SVN پشتیبانی از

در منوهای برنامه) و نیازی به هیچگونه تنظیمات خاصی برای فعال کردن اولیه آن نیست. Versioning کامل وجود دارد (توسط گزینه

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۵٧

فصل ۵ – تهیه پشتیبان از مخزن های کدها

مقدمه:

بدون تهیه پشتیبان های منظم از مخزن های کد، عملا استفاده از این سیستم کاری بیهوده است. در این فصل نحوه تهیه پشتیبان از

اطلاعات مخزن های کدها و بازیابی آنها را مورد بررسی قرار خواهیم داد.

تهیه پشتیبان از مخزن کد:

الف) روش کپی کردن فای لها

را متوقف کرد. svn این روش سریعترین حالت ممکن تهیه پشتیبان است اما باید سرور

dump ب) تهیه فایل

و اجرای خط فرمان زیر م یتوان از یک مخزن کد پشتیبان تهیه کرد: svnadmin با استفاده از برنامه استاندارد

C:\>SVNAdmin dump C:\Repositories\TestRepo > C:\backup\dumps\dmp01.bak

ویندوز قرار گرفته است (فصل یک)، نیازی به مشخص نمودن PATH در SVN برنامه bin در این دستور با توجه به اینکه پوشه

در فایل C:\Repositories\TestRepo مخزن کد واقع شده در مسیر dump مسیر کامل آن نخواهد بود. سپس

ذخیره خواهد شد (پسوند فایل اهمیتی ندارد). C:\backup\dumps\dmp01.bak

این روش از فایلهای تنظیمات مخزن کد پشتیبان تهیه نم یکند.

را از سایت آن دریافت کرده و SVN اگر هنگام اجرای این فرمان با خطای زیر مواجه شدید، بدین معنا است که باید آخرین نگارش

را نیز باید به روز نمود): SVN برنامه ، TortoiseSVN نصب نمائید (همواره پس از به روز رسانی

svnadmin: Expected format '3' of repository; found format '5'

اگر تمایل دارید که به این روش پشتیبان تهیه کنید، برنامه سورس باز زیر رابط کاربر مناسبی را در اختیار شما قرار م یدهد:

http://www.codeplex.com/svnbackupwidget

hotcopy ج) روش

اگر شخصی یک یا چند فایل پروژه را قفل کرده باشد، استفاده از روش فوق هنگام بازیابی اطلاعات با مشکل مواجه خواهد شد. در این

باید استفاده شود (که در هر زمانی و تحت هر شرایطی قابل اجرا است و به معنای یک کپی امن از مخزن hotcopy موارد از روش تهیه

کد می باشد):

SVNAdmin hotcopy C:\Repositories\TestRepo C:\backup\hotdumps --clean-logs

در اینجا مسیر مقصد باید یک پوشه خالی باشد.

برای بررسی صحت عملیات تهیه پشتیبان، می توان دستور خط فرمان زیر را اجرا کرد:

svnadmin verify C:\backup\hotdumps

فصل ۵ – تهیه پشتیبان از مخزن های کدها

۵٨

می توان عملیات تهیه پشتیبان روزانه را تحت یک زمان بندی مشخص windows task scheduler با استفاده از برنامه استاندارد

ایجاد کنید و bat انجام داده و سپس آنرا به صورت خودکار به رایانه ای دیگر در شبکه منتقل نمود. برای مثال یک فایل متنی با پسوند

محتویات آنرا به صورت زیر تنظیم نمائید:

DailyBackup.bat

::Reset final backup storage:

rmdir /S /Q \\archive\svn_backup\daily\v5

mkdir \\archive\svn_backup\daily\v5

::Reset Temp backup storage

rmdir /S /Q C:\SVNBACKUP

mkdir C:\SVNBACKUP

::Initiate SVN backup. Use svadmin hotcopy --help for details

svnadmin hotcopy C:\ARMS\ C:\SVNBACKUP --clean-logs

::Copy temp backup storage to final backup storage

xcopy C:\SVNBACKUP \\archive\svn_backup\daily\v5 /E /I /Q /H /R /Y

نام دارد. سایر مسیرها را نیز باید archive ، نام سروری که فایل ها پس از تهیه پشتیبان به آن منتقل خواهند شد ، batch file در این

همانند مخزن کد خود و مسیرهای موجود در شبکه تنظیم نمائید.

مسیر زیر را در ویندوز طی نمائید: ، batch file برای تنظیم زمانبدی اجرای این

All programs → accessories → system tools → scheduled tasks

ایجاد شده را به آن bat آن، ابتدای فایل wizard کلیک کرده و مطابق add scheduled tasks در صفحه باز شده، بر روی

را انتخاب و در ادامه نام کاربری و کلمه عبور مناسبی را وارد نمائید. باید دقت داشت که این bat معرفی کنید، سپس زمان اجرای فایل

با موفقیت اجرا xcopy کاربر باید دسترسی کپی کردن فایل ها را به سرور مورد نظر در شبکه، داشته باشد. در غیراینصورت عملیات

نخواهد شد.

dump بازیابی اطلاعات از پشتیبان تهیه شده توسط روش

تهیه شده)، ابتدا باید مخزن کد جدیدی را ایجاد نمود (که در طی فصل های قبل با dump برای بازیابی اطلاعات از پشتیبان (یک فایل

آن آشنا شده اید). سپس دستور زیر را درخط فرمان وارد نمائید:

svnadmin load C:\SVN\MyProject < C:\tmp\MyProject.bak

استفاده کرد. TortoiseSVN برنامه repo-browser برای بررسی صحت عملیات صورت گرفته م یتوان از

مقایسه سه روش پشتیبان گیری

روش نیاز به متوقف سازی

سرور دارد؟

از فایلهای تنظیمات

پشتیبان می گیرد؟

سرعت

بله بله سریعترین File Copy

خیر خیر کندترین Dump/Load

خیر بله سریع Hotcopy

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۵٩

SVN فصل ۶ – آشنایی با قلاب ها در

مقدمه:

می دهند. برای مثال SVN امکان انتساب اعمالی (برنامه هایی) را به ر خدادهای معین ، SVN یا قلاب های Subversion hooks

به سایر اعضای تیم، به روز رسانی خودکار یک سایت پس از هماهنگ سازی با مخزن کد، به روز commit ارسال ایمیل پس از هر

قرار C:\Repositories\TestRepo\ و امثال آن. برای مثال اگر مخزن کد ما در آدرس issue tracking system رسانی

. (C:\Repositories\TestRepo\hooks) نیز قابل مشاهده است Hooks داشته باشد در اینجا پوشه

قابل اتصال هستند، در آدر سهای زیر می توانید دریافت کنید: SVN نمونه ای از اسکریپ تهایی را که به قلا بهای

http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/

http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/

: SVN انواع قلا بهای

start-commit •

اعضای تیم commit فراخوانی می شود. یکی از کاربردهای آن جلوگیری از ، commit این رخداد پیش از شروع تراکنش

است اگر شرایط ویژه ای محقق نشده باشد. اگر خروجی اسکریپت مورد استفاده در اینجا غیرصفر باشد عملیات متوقف می شود.

آرگومانهایی را که این رخداد به برنامه یا اسکریپت قلاب ارسال م یکند شامل مسیر مخزن کد و نام کاربر است.

pre-commit •

و پیش از اجرای واقعی آن فراخوانی م یشود. یکی از کاربردهای آن بررسی commit این رخداد در هنگام شروع عملیات

استانداردهایی است که در یک تیم برنامه نویسی باید رعایت شود (برای مثال تمام برنامه نوی سها موظف به ارائه توضیحاتی در

شوند). اگر خروجی اسکریپت مورد استفاده در اینجا غیرصفر باشد عملیات متوقف می شود. آرگومانهایی را که commit مورد

این رخداد به برنامه یا اسکریپت قلاب ارسال م یکند شامل مسیر مخزن کد و نام تراکنش است.

post-commit •

فراخوانی می شود. یکی از کاربردهای آن ارسال ایمیل به سایر اعضای تیم است. commit این رخداد پس از اتمام تراکنش

__________آرگومانهایی را که این رخداد به برنامه یا اسکریپت قلاب ارسال م یکند شامل مسیر مخزن کد و شماره بازنگری است.

pre-revprop-change •

فراخوانی م یشود (در مورد این خاصیت در فص لهای قبل (revision property) این رخداد پیش از تغییر خاصیت بازنگری

توضیحات لازم ارائه شد). آرگومانهایی را که این رخداد به برنامه یا اسکریپت قلاب ارسال م یکند شامل مسیر مخزن کد ،

شماره بازنگری، نام کاربر و نام خاصیت است.

post-revprop-change •

این رخداد پس از تغییر خاصیت بازنگری فراخوانی می شود. عموما از آن برای اطلاع رسانی استفاده می شود. آرگومانهایی را که

این رخداد به برنامه یا اسکریپت قلاب ارسال م یکند شامل مسیر مخزن کد ، شماره بازنگری، نام کاربر و نام خاصیت است.

pre-lock •

این رخدا پیش از ایجاد یک قفل فراخوانی می گردد. آرگومانهایی را که این رخداد به برنامه یا اسکریپت قلاب ارسال می کند

شامل مسیر مخزن کد ، مسیری که در آن قفل ایجاد خواهد شد و نام کاربر مربوطه م یباشد. اگر خروجی اسکریپت مورد

استفاده در اینجا غیرصفر باشد عملیات متوقف م یشود.

post-lock •

SVN فصل ۶ – آشنایی با قلاب ها در

۶٠

این رخداد پس از کامل شدن عملیات قفل کردن فای لها فراخوانی می شود. آرگومانهایی را که این رخداد به برنامه یا اسکریپت

قلاب ارسال م یکند شامل مسیر مخزن کد و نام کاربر مربوطه م یباشد.

post-unlock •

این رخداد پس از قفل گشایی فای لها فراخوانی خواهد شد. آرگومانهایی را که این رخداد به برنامه یا اسکریپت قلاب ارسال

می کند شامل مسیر مخزن کد و نام کاربر مربوطه می باشد.

pre-unlock •

این رخداد پیش از قفل گشایی فایل ها فراخوانی خواهد شد. آرگومانهایی را که این رخداد به برنامه یا اسکریپت قلاب ارسال

می کند شامل مسیر مخزن کد ، مسیری که در آن قفل باز خواهد شد و نام کاربر مربوطه می باشد. اگر خروجی اسکریپت مورد

استفاده در اینجا غیرصفر باشد عملیات متوقف م یشود.

برای مطلع سازی سایر اعضای تیم post-commit استفاده از رخداد

که در ادامه ارائه خواهد شد، نیاز به برنام های داریم که بتواند از طریق خط فرمان post-commit.bat پیش از بررسی محتویات فایل

ویندوز ایمیل ارسال کند. نمونه ای از این برنام هها را از آدرس های زیر م یتوانید دریافت کنید:

http://caspian.dotconf.net/menu/Software/SendEmail/

http://sourceforge.net/projects/blat/

: post-commit.bat محتویات فایل

@ECHO OFF

REM *************************************************************

REM * this sets the arguments supplied by Subversion

REM *************************************************************

SET REPOS=%1

SET REV=%2

SET DIR=%REPOS%/hooks

SET PATH=%PATH%;%DIR%;C:\Utils

SET WORKING_COPY=c:\path\to\working\copy

SET SITENAME=My Code Base

SET SMTP_SERVER=smtp.yourdomain.com

SET EMAIL_TO=svnupdates@yourdomain.com

SET EMAIL_FROM=svnupdates@yourdomain.com

SET SUBJECT=SVN Update - %SITENAME% - rev %REV% - %REPOS%

svn update %WORKING_COPY%

ECHO The following changes were made to the code: > %DIR%/email.txt

ECHO. >> %DIR%/email.txt

REM *************************************************************

REM * dump the log of changes to the e-mail message

REM *************************************************************

svn log %WORKING_COPY% -v -r "%REV%" >> %DIR%/email.txt

REM *************************************************************

REM * dump the diff changes to the e-mail message

REM *************************************************************

svn diff %WORKING_COPY% -c "%REV%" --no-diff-deleted >> %DIR%/email.txt

sendEmail -s %SMTP_SERVER% -t %EMAIL_TO% -f %EMAIL_FROM% -u "%SUBJECT%" -o messagefile=%

DIR%/email.txt

توضیحاتی در مورد اسکریپت فوق:

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۶١

است و دومین آرگومان hooks اولین آرگومانی را که به اسکریپت ما ارسال می کند مسیر پوشه post-commit رخداد

ارسال شده شماره خودکار بازنگری عملیات می باشد.

ویندوز جهت سهولت کار اضافه PATH قرار گرفته و سپس به C:\utils در اینجا در مسیر sendMail برنامه خط فرمان

شده است.

diff را باید اصلاح نمائید (همانطور که ملاحظه م یکنید در صورت نیاز به محتویات WORKING_COPY مسیر

می توان یک نسخه کاری را نیز بر روی سرور قرار داد).

و تنظیمات ایمیل ها را نیز مطابق اطلاعات سرور خود ویرایش کنید. smtp server موارد مربوط به

ممکن است حجم زیادی از اطلاعات را ایجاد نماید. اگر نیازی به آن ندارید می توانید از آن خط صرفنظر نمائید. diff عملیات

اسکریپت های قلاب را در محیطی ایزوله اجرا م یکند. بنابراین در این محیط امکان دسترسی به متغیرهای svn ، بدلایل امنیتی

یکبار مقدار دهی شده است. PATH و غیره نخواهد بود. به همین جهت در اسکریپت فوق متغییر PATH محیطی مانند

به آن انتقال داده خواهند شد (مسیر پوشه svn هنگام اجرای اسکریپت توسط SET DIR=%1/hooks آرگومان های

در غیراینصورت (عدم استفاده از این مسیرهای استاندارد) خروجی فای لهای ما در مسیرهای پیش بینی شده قرار .(hooks

نخواهند گرفت.

نام این فایل باید مطابق یکی از رخدادهای تعریف شده فوق ) post-commit.bat برای اجرا شدن این اسکریپت تنها کافی است فایل

VisualSVN server مخزن کد خود قرار دهید. راه دیگر استفاده از hooks باشد، در غیراینصورت اجرا نخواهد شد)، را در پوشه

به سادگی Hooks است. بر روی مخزن کد خود در این برنامه کلیک راست کرده و خواص آنرا انتخاب کنید. در صفحه باز شده در برگه

.( می توان رخدادهای منتسب به اسکریپ تهای قلاب را مدیریت کرد (شکل ۱

.VisualSVN server شکل ۱– امکان مدیریت ساده قلا بها با استفاده از

SVN فصل ۶ – آشنایی با قلاب ها در

۶٢

هنگام اجرای یک اسکریپت قلاب svn دریافت خروجی های

برای دیباگ کردن یک اسکریپت قلاب م یتوان از روش زیر استفاده کرد.

تغییر دهید. post-commit-run.bat را به post-commit.bat نام فایل

جدید را با محتویات زیر ایجاد کنید: post-commit.bat اکنون یک فایل

call %~dp0post-commit-run.bat %* > %1/hooks/post-commit.log 2>&1

ذخیره خواهد شد که جهت دیباگ کردن post-commit.log با استفاده از این روش خروجی اجرای اسکریپت ما در فایل

عملیات بسیار مفید است.

نکته:

اگر اسکریپت شما از نوع . bat یا exe در ویندوز اسکریپ تهای قلاب باید از نوع فای لهای اجرایی باشند برای مثال فایلهایی با پسوند

با محتوای زیر درست کنید: bat است برای اجرا آن یک فایل vbs

SET PATH=C:\Windows;C:\Windows\system32;

cscript.exe //NoLogo C:\Repositories\TestRepo\hooks\sample.vbs

یا زبان های دیگر برنامه نویسی برای نوشتن قلا بها C# استفاده از

نوشت. برای مثال : svn یا هر زبان برنامه نویسی دیگر نیز م یتوان قلاب هایی را برای C# با استفاده از قابلی تهای

using System;

namespace post_commit {

class Class1 {

[STAThread]

static void Main(string[] args) {

System.IO.StreamWriter sw = new

System.IO.StreamWriter(@"f:\PostCommit.txt", true,

System.Text.Encoding.Default);

sw.Write(System.DateTime.Now.ToString() + ":" +

string.Join("|", args));

sw.Close();

}

}

}

است که نام نهایی آن باید مطابق یکی از رخدادهای استاندارد قلاب ها باشد (تا پس از قرارگیری در پوشه console این برنامه از نوع

قابل استفاده شود). hooks

بدیهی است این روش توانایی قابل توجهی را در اختیار شما در مقایسه با اسکریپت نویسی ساده قرار م یدهد. البته همیشه باید این نکته

را به خاطر داشت که سرعت اجرای قلا بها باید زیاد بوده و هرچه سریعتر به پایان برسند، در غیراینصورت کاربران با مشکل مواجه خواهند

در حین کار با یک سرور راه دور). timeout شد (برای مثال دریافت

است: Subversion Notify نمونه ای دیگر از این تلا شها برنامه

http://www.subversionnotify.com/

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۶٣

قلاب های سمت کلاینت

آن قابل تنظیم است و قلاب هایی که در اینجا Hook scripts مراجعه کنید، قسمت TortoiseSVN اگر به تنظیمات برنامه

تنظیم شوند تنها بر روی کلاینت اجرا خواهند شد (برخلاف قلا بهای سمت سروری که تاکنون مورد بررسی قرار گرفتند).

SVN فصل ٧ – مرور بهترین تجربه های کاری با

۶۴

SVN فصل ۷ – مرور بهترین تجربه های کاری با

مقدمه:

یا هر سیستم کنترلی دیگر باید اندکی در شیوه های کاری خود تغییر ایجاد نمود تا بتوان از توانایی های این SVN برای کار با

و امثال آن به دلایل بسیاری که در فص لهای قبل در مورد آنها SVN محصولات حداکثر استفاده را برد. باید درنظر داشت که هرچند

بحث شد برای یک برنامه نویس مفید هستند، اما ابتدایی ترین دلیل توسعه آنها تسهیل روابط کاری با سایر اعضای یک تیم برنامه نویسی

در یک تیم برنامه نویسی بحث خواهیم کرد. SVN است. در ادامه این فصل درباره بهترین تجرب ههای کاری استفاده از

یک مخزن کد (layout) انتخاب آرایش

انتخاب آرایش یک مخزن کد برای کمک نمودن به اعضای تیم در جهت یافتن ساده تر نگار شهای مختلف پروژه بسیار حائز اهمیت

بسیار عالی جواب م یدهد و ریشه مخزن کد شما به صورت زیر خواهد بود: trunk/branches/tags است. برای یک پروژه آرایش

branches

tags

trunk

را داشته باشد، با اولین بررسی قادر به SVN این آرایش کاملا استاندارد بوده و هر شخصی در سراسر دنیا که پیشتر تجربه کار با

تشخیص ساختار مخزن کد و استفاده از آن خواهد بود. اما در حالت مدیریت چندین پروژه، استاندارد مشخصی وجود ندارد. در این حالت

عموما یکی از دو آرایش زیر مورد استفاده قرار م یگیرد که در ادامه به مزایا و معایب هریک اشاره خواهد شد:

branches

project1

project2

tags

project1

project2

trunk

project1

project2

و یا آرایش بعد:

project1

branches

tags

trunk

project2

branches

tags

trunk

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۶۵

اولین آرایش برای حالتی مناسب است که پروژه ها واحدهای مشترکی را با یکدیگر داشته باشند و یا کلا یک واحد اصلی بزرگتر را

تشکیل دهند. مزیت آن استاندارد بودن سطح اصلی مخزن کد است و مشکل آن جابجا کردن فایل ها و پوشه های پروژه ها است. برای مثال

اگر در آینده قصد تفیک آنها را داشته باشید کار مشکلی را پیش رو خواهید داشت. همچنین مباحث اعتبار سنجی ریزتری را با توجه به یکی

بودن ریشه اصلی مخزن کد نیز مشکل م یتوان اعمال کرد.

دومین آرایش برای حالتی مناسب است که پروژ هها از یکدیگر مجزا بوده و تنها تحت یک مخزن کد نگهداری م یشوند. در این حالت هر

پروژه آرایشی استاندارد داشته و همچنین اعمال سطوح دسترسی مختلف نیز به آنها ساد هتر است.

از قفل کردن فای لهای قابل ادغام خودداری کنید

بسیاری از سازمان ها در حال کنار گذاشتن استفاده از سیستم های کنترل سورس کدی که برای کار کردن با فایل ها در آنها باید حتما

قفل کردن فای لها مشکلات عدید های را برای سایر اعضای تیم به همراه .(SourceSafe فایل ها را قفل نمود، هستند (برای مثال

خواهد داشت، برای مثال قفل کردن طولانی مدت یک فایل و سپس فراموش نمودن رها کردن آن قفل. در یک تیم ممکن است دو نفر بر

خودکار merge روی دو قسمت مجزای یک فایل کار کنند و قفل کردن یک فایل در اینجا صرفا به مشکلات خواهد افزود و با امکانات

نیازی به قفل کردن فایل اصلی نیست. همچنین با امکاناتی که در فصل های قبل در مورد قلا بها ارائه شد، می توان با ارسال SVN در

ایمیل، بلافاصله سایر اعضای تیم را درجریان تغییرات قرار داد.

به صورت خودکار یکی کرد ، باید قفل کرد. merge تنها فای لهای گرافیکی و امثال آنرا که نم یتوان با استفاده از ابزار

همگام سازی متناوب با مخزن کد

آخرین تغییرات جهت نگهداری سوابق آنها و همچنین در دسترس قرار دادن آن commit ، هدف نهایی یک سیستم کنترل سورس کد

موارد جهت سایر اعضای تیم م یباشد. هرچقدر تغییرات را دیرتر با مخزن کد هماهنگ کنید ، مشکلات بیشتری را برای اعضای تیم پدید

خواهید آورد. با ارسال متناوب کدهای خود به مخزن، در صورت بروز هرگونه مشکل سخت افزاری و امثال آن، نگران از دست دادن

کدهای محلی خود نخواهید بود چون عموما سخت افزارهای بهتری را برای رایا نه های سرویس دهنده درنظر می گیرند. همچنین همواره

سیستم تهیه پشتیبان بر روی سرورها منظ متر از سیستم های تهیه پشتیبان های محلی است و نظارت بیشتری بر آنها صورت می گیرد.

بعلاوه ارسال متناوب کدها به مخزن از احتمال ایجاد تداخ لها با سایر اعضای تیم جلوگیری م یکند و امکان هماهنگ سازی بیشتر آنها را

با تغییرات جدید فراهم م یآورد.

هرچند ممکن است این تصور وجود داشته باشد که ارسال یک کد باگ دار ممکن است بر روی سایر هم تیمی ها اثر منفی بگذارد و

بنابراین بهتر است کمی دیرتر نسبت به ارسال و اعمال تغییرات اقدام کرد، اما بر اساس قوانین مورفی همواره یک باگ وجود دارد که شما

به آن پی خواهید برد! (اگر قرار باشد چیزی خراب شود، می شود) commit تنها پس از

به همین جهت تغییرات خود را سریعتر با مخزن کد هماهنگ سازید، زیرا رفع خطای مربوط به تغییراتی با وسعت کم، ساده تر است و

درک آن نیز برای سایر اعضای تیم دشوار نخواهد بود.

و یا اگر کدی که مشغول به کار بر روی آن هستید بیشتر حالت آزمایشی دارد بهتر است یک انشعاب جدید برای آن ایجاد نموده و سایر

اعضای تیم را درگیر خطاهای کدهای خود در انشعاب اصلی کاری ننمائید.

از توضیحات معنا داری استفاده کنید commit هنگام

هماهنگ سازی متناوب و سریع تغییرات کوچک در کدها با مخزن کد، یکی از مواردی است که به سایر هم تیمی ها در درک کدهای

شما کمک خواهد کرد. مورد دیگر توضیحاتی است که هنگام هماهنگ سازی آخرین تغییرات خود با مخزن کد ارائه م یدهید. بعلاوه، این

مورد هنگام تهیه گزارش از تغییرات انجام شده در یک مخزن کد در طول زمان نیز بسیار مفید می باشد.

SVN فصل ٧ – مرور بهترین تجربه های کاری با

۶۶

انشعابات و ادغام سازی

از لحاظ ایجاد انشعابات سریع و کم حجم، بسیار پیشرفت داشته است، اما این بدان معنا نیست که هر CVS نسبت به SVN هرچند

commit زمان باید یک انشعاب جدید را ایجاد کرده و در آن مشغول به کار شد. همانطور که عنوان شد هدف نهایی از یک مخزن کد

و شاخه اصلی کاری trunk اطلاعات جدید به commit اطلاعات جدید به آن است اما اگر این جمله را بخواهیم اصلاح کنیم باید گفت

است. بنابراین تا حد امکان از ایجاد انشعابات خودداری کنید مگر مواردی که نیاز به تست و آزمایش دارند و بهتر است آنها را از خط اصلی

استفاده خواهند شد یا خیر. یا برای مثال به trunk کاری دور نگه داشت و گاهی از اوقات حتی مشخص نیست این تلاش ها آیا واقعا در

ازای هر نگارش عمومی برنامه بهتر است یک انشعاب نیز ایجاد شود تا تمامی آزمایشات لازم بر روی این نگارش خارج از خط اصلی کاری

برای .(tag انجام شود. پس از اطمینان حاصل کردن از کیفیت کار حاصل شده در انشعاب ارائه عمومی، م یشود به آن برچسب زد (ایجاد

مثال گزارشی از برچسب زدن به ارائ ههای عمومی برنامه:

tags

7 months ago 0.9.0

8 months ago 0.8.7

9 months ago 0.8.6

9 months ago 0.8.5

، export جهت ارائه برنامه (اگر سورس باز است) می توان با استفاده از دستور ، tag همانطور که پی شتر نیز عنوان شد، پس از ایجاد یک

ایجاد کرد. svn یک کپی سریع بدون پوش ههای مدیریتی

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۶٧

با سایر ابزارها SVN فصل ۸ – یکپارچگی

مقدمه:

بدلیل ارائه دو ویژگی ب هسادگی با محصولات مختلف قابل یکپارچه شدن است. امکان اجرای دستورات در خط فرمان و همچنین SVN

طراحی SVN بسیار قوی جهت کار با توانایی های مختلف این برنامه سبب شده است که ابزارهای زیادی جهت سهولت کار با API

خواهیم پرداخت. هرچند ابزار استاندارد SVN شوند. در این فصل بیشتر به راب طهای کاربری تحت وب طراحی شده برای

که پیشتر با آن آشنا شدیدم امکان مرور تحت وب مخزن کد را می دهد اما این ابزار برای کاربران حرفه ای به هیچ mod_dav_svn

عنوان راضی کننده نیست زیرا امکان مشاهده نحوه تغییرات ، جزئیات آنها و همچنین مشاهده نگارش های قبلی و امثال آنرا فراهم

نمی کند. تلاش های بسیاری در این زمینه صورت گرفت هاست ، برای مثال راب طهای کاربری تحت وب زیر را می توان نامبرد:

ViewVC → http://www.viewvc.org/

SVN::Web → http://search.cpan.org/~nikc/SVN-Web/

محبوبیت بسیاری یافته است که در این فصل به نحوه استفاده از آن خواهیم Trac اما در سا لهای اخیر سیستم یکپارچه مدیریت پروژه

پرداخت. این سیستم از آدرس زیر قابل دریافت است:

http://trac.edgewall.com/

چیست؟ Trac

و ردیابی خطاها شناخته می شود که در سال ۲۰۰۶ موفق به Wiki محصولی است سورس باز و به عنوان سیستم بهبود یافته Trac

دریافت جایزه زیر شد:

UK Linux & Open Source Award for Best Linux OSS Developer Tool

برای تهیه مستندات پروژه ، راهنمای سیستم و امثال آن استفاده می شود و با توجه به ماهیت آن هیچ ساختار از Trac در Wiki از

به صورت Wiki پیش تعیین شده ای به تیم دیکته نشده و نحوه تهیه و مدیریت آن به صلاحدید اعضای تیم خواهد بود. همچنین یک

خودکار تحت یک سیستم کنترل نگارش قرار دارد و نحوه تغییرات و نگار شهای مختلف صفحات در آن کاملا قابل بررسی و کنترل است.

نیز وجود دارد که از آن جهت ساد هتر نمودن مراحل (Trac ticket system) ماژول دیگری به نام ماژول بلیط Trac در سیستم

مختلف کنترل پروژه اعم از ردیابی وظایف محوله، ارائه درخواست های جدید، گزارش خطاها و پشتیبانی برنامه، استفاده می شود. همچنین

امکان انتساب هر بلیط به افراد تیم، واگذار کردن وظایف محوله به دیگران و همچنین گزارشگیری از این اتفاقات نیز در این سیستم میسر

آتی (milestones) کارراهه) می باشد که در آن امکان مشاهده زمان های ارزیابی ) roadmap ، است. یکی از افزونه های ماژول بلیط

چشم انداز پروژه را نمایش داده و Roadmap . وجود داشته و مشخص می کند که چه بلیط هایی به هر کدام انتساب داده شده است

در Timeline توسط آن م یتوان دریافت که به کجا خواهیم رسید و بلی طها نحوه رسیدن به اهداف پروژه را بیان م یکنند. بعلاوه ماژول

بلیط ها، ،Wiki امکان گزارشگیری از وقایع انجام شده در پروژه را مهیا می کند. توسط این ماژول امکان گزارشگیری از تغییرات Trac

نیز قابل دسترسی می باشد. RSS تغییرات سورس کدها و زما نهای ارزیابی امکانپذیر است. این گزارش به صورت یک تغذیه خبری

امکان مرور یک مخزن کد را نیز فراهم کرده و علاوه بر نمایش محتویات آن، تغییرات انجام شده و Trac ، علاوه بر این موارد

آنلاین نگارش های مختلف یک فایل نیز در آن diff گزارشی از وقایع ثبت شده در سیستم را نیز ارائه می دهد. همچنین امکان مشاهده

مهیا است.

با سایر ابزارها SVN فصل ٨ – یکپارچگی

۶٨

در ویندوز Trac نصب و راه اندازی

و بررسی جزئیات مربوطه: Trac الف) روش سنتی نصب

می باشد که در طی فصل های قبل این موارد بررسی شدند و در Apache و وب سرور SVN در ابتدا نیاز به نصب Trac برای نصب

باید رعایت گردد). Apache در وب سرور SVN این فصل از پرداختن مجدد به آنها خودداری خواهد شد (تمام موارد نصب ماژول های

فعال کرد (علامت Apache2.2\conf\httpd.conf پس از نصب مواردی که در فصل یک به آنها اشاره شد باید خط زیر را در فایل

# ابتدای آنرا حذف کنید)

AddHandler cgi-script .cgi

. (stop/start) را از نو راه اندازی کنید Apache پس از این تغییر باید یکبار

را انتخاب Python windows installer را بر روی ویندوز نصب کرد. به آدرس زیر مراجعه نموده و گزینه Python سپس باید

کنید:

http://www.python.org/download/

شکل ۱) نکته خاصی نداشته و پیش فر ضهای آن را بپذیرید. ) Python نصب

بر روی ویندوز Python شکل ۱- نصب

ویندوز اضافه کرد (روش انجام این عملیات در فصل یک بررسی گردید). دو مسیر PATH را به python اکنون باید مسیر پوشه

ویندوز اضافه شوند. PATH بهتر است به C:\Python و \ 25 C:\Python25\Scripts

می باشد که از آدرس زیر قابل دریافت است: setuptools سپس نیاز به نصب

http://pypi.python.org/pypi/setuptools/

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

۶٩

خود را باید از آدرس فوق دریافت کرده و نصب کنید. درصورت عدم نصب این برنامه، در ادامه python دقت نمائید نسخه مرتبط با

نخواهید شد. trac-admin مراحل نصب موفق به اجرای برنامه

معرفی کرد. برای این منظور به آدرس زیر مراجعه نموده: Apache را به وب سرور python در ادامه باید

http://www.apache.org/dist/httpd/modpython/win/

نصب python آنرا نصب نمائید (دقت نمائید نگارش این ماژول باید با نگارش ، mod_python و پس از دریافت آخرین نگارش

شده بر روی سیستم شما همخوانی داشته باشد).

از آدرس زیر آخرین نگارش .(Python Subversion Bindings) است SVN به Python مرحله بعد، انقیاد

را دریافت کنید: svn-python-XYZ.win32-pyXYZ.exe

http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91

. svn-python شکل ۲- نصب

بر روی سیستم وجود دارد. هنگام python نکته ای را که باید در اینجا دقت داشت این است که امکان وجود چندین نگارش مختلف

شکل ۲)، آخرین نگارش نصب شده را از لیست انتخاب کنید. همچنین همواره باید نگارش فایل های انقیاد با ) svn-python نصب

شما یکسان باشد. SVN نگارش

جهت مدیریت بانک اطلاعاتی سیستم در اینجا استفاده خواهد شد. آخرین SQLite است. از SQLite به python مرحله بعد، انقیاد

را از یکی از آدرس های زیر دریافت کنید: pysqlite نگارش

http://www.initd.org/pub/software/pysqlite/releases/

http://oss.itsystementwicklung.de/trac/pysqlite/

کلیک next مورد نظر (آخرین نگارش نصب شده)، چند بار بر روی دکمه python نصب آن ساده است و پس از انتخاب نگارش

نمائید تا کار به پایان برسد.

نیز فراهم است: MySQL لازم به ذکر است در اینجا امکان استفاده از سایر بان کهای اطلاعاتی مانند

http://sourceforge.net/projects/mysql-python

با سایر ابزارها SVN فصل ٨ – یکپارچگی

٧٠

عملا نیازی به هیچگونه تنظیم خاصی برای نصب و راه SQLite . که نیاز به نصب و راه اندازی و تنظیمات مخصوص به خود را دارد

اندازی ندارد، حجم کمی داشته و بسیار سریع است.

است باید نصب کرد. برای دریافت HTML template system را که یک ClearSilver سپس

به آدرس زیر مراجعه نمائید: clearsilver-0.9.14.win32-py2.4.exe

http://www.clearsilver.net/downloads/win32/

clearsilver_python-0.9.12-win32.zip سازگار است. به همین منظور فایل python متاسفانه این نگارش تنها با 2.4

در محل Lib\site-packages را در پوشه neo_cgi.pyd را از آدرس فوق دریافت نموده و پس از استخراج محتویات آن، فایل

خود کپی کنید. python نصب

عمل می کند. XML & HTML parser را باید نصب نمود. این برنامه بعنوان genshi در ادامه

http://genshi.edgewall.org/wiki/Download

خود را دریافت کرده و سپس آنرا نصب نمائید. python نسخه سازگار با نگارش

را نصب کرد. برای دریافت آخرین نگارش آن به آدرس زیر مراجعه کنید: Trac اکنون م یتوان

http://trac.edgewall.org/wiki/TracDownload

به پایان می رسد. next شروع شده و با چندبار کلیک کردن بر روی دکمه python نصب آن همانند موارد ذکر شده با انتخاب نسخه

را به ازای هر مخزن کد تنظیم نمود. فرض کنید تنظیمات زیر بر روی سیستم ما موجود هستند: trac سپس باید بانک اطلاعاتی

C:\Repositories\TracTest در مسیر TracTest مخزن کد

C:\Repositories\TracConfig\TracTest در مسیر TracTest مخصوص مخزن کد Trac پوشه ذخیره سازی تنظیمات

دستور زیر را در خط فرمان اجرا کنید: trac برای تنظیم نمودن بانک اطلاعاتی

C:\>C:\Python25\Scripts\trac-admin.exe C:\Repositories\TracConfig\TracTest initenv

در اینجا یک سری سؤال از شما پرسیده خواهند شد که به شرح زیر هستند:

Project Name [My Project]>

Database connection string [sqlite:db/trac.db]>

Repository type [svn]>

Path to repository [/path/to/repos]> C:\Repositories\TracTest

قبول نمائید. این مورد را نیز برای رشته Enter در ابتدا نام دلخواه پروژه پرسیده م یشود. می توانید مقدار پیش فرض را با فشردن دکمه

در پایان مسیر صحیح مخزن کد مورد استفاده را وارد .(Enter اتصالی به بانک اطلاعاتی و نوع مخزن کد تکرار نمائید (فشردن دکمه

کنید (حتما باید مسیر کامل را وارد نمائید).

Trac حاوی تنظیمات مربوط به C:\Repositories\TracConfig\TracTest\conf\trac.ini پس از پایان عملیات فایل

خواهد بود. برای آزمایش عملیات دستور زیر را در خط فرمان اجرا کنید:

C:\>C:\Python25\Scripts\tracd --port 8000 C:\Repositories\TracConfig\TracTest

ویندوز اضافه شده باشد نیازی به ذکر آن به صورت فوق نخواهد بود. PATH به C:\Python25\Scripts بدیهی است اگر

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٧١

اکنون در مرورگر خود آدرس زیر را وارد کنید:

http://localhost:8000/

.( وارد خواهید شد (شکل ۳ Trac لیست پروژه های تحت کنترل ظاهر شده و با کلیک بر روی یکی از آنها به صفحه اصلی

بر روی ویندوز Trac شکل ۳- نصب اولیه

به صورت سرویس ویندوز نیز مهیا است. برای این منظور باید دستور زیر را اجرا کرد: tracd امکان نصب

InstSrv tracd "C:\Program Files\Windows Resource Kits\Tools\srvany.exe"

ویندوز را گشوده و مدخل زیر را پیدا کنید registry editor ، پس از اجرای این دستور

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tracd

را تعریف کنید. AppParameters و Application به آن اضافه نموده و دو مقدار رشته ای Parameters کلید جدیدی را به نام

و tracd باید شامل مسیر کامل برنامه AppParameters نصب شده اشاره کند و python باید به مسیر Application

پارامترهای آن باشد.

نباشد (یا tracd متصل نمود تا هر بار نیاز به اجرای دستی برنامه Apache را به وب سرور Trac پس از نصب و آزمایش اولیه، باید

نیازی به نصب آن به صورت سرویس ویندوز نباشد).

اضافه نمائید. Apache2.2\conf\httpd.conf ابتدا سطر زیر را به فایل

LoadModule python_module modules/mod_python.so

سپس به انتهای فایل فوق خطوط زیر را اضافه کنید:

<location /mpinfo>

SetHandler mod_python

PythonInterpreter main_interpreter

PythonHandler mod_python.testhandler

</location>

و مسیر زیر را در مرورگر خود وارد کنید: (stop/start) را از نو راه اندازی کرده Apache اکنون یکبار وب سرور

http://localhost:81/mpinfo

با سایر ابزارها SVN فصل ٨ – یکپارچگی

٧٢

استاندارد Event viewer در صورت موفقیت آمیز بودن عملیات باید شکل ۴ ظاهر شود. اگر خطایی ظاهر شد، جزئیات آنرا با استفاده از

ویندوز م یتوان ملاحظه کرد.

شکل ۴- اطلاعات عمومی وب سرور آپاچی

اضافه کنید: Apache2.2\conf\httpd.conf سپس خطوط زیر را به انتهای فایل

<Location /trac>

SetHandler mod_python

PythonInterpreter main_interpreter

PythonHandler trac.web.modpython_frontend

PythonOption TracEnv "C:/Repositories/TracConfig/TracTest/"

PythonOption TracUriRoot /trac

</Location>

اکنون باید از طریق آدرس زیر در دسترس باشد: Trac برنامه

http://localhost:81/trac

Trac ب) روش دوم نصب

را فراهم آورده است. برای VisualSVN Server و Trac مراحل فوق را ساده کرده و امکان یکپارچه کردن VisualSVN تیم

دریافت بسته نصب آن به آدرس زیر مراجعه کنید:

http://www.visualsvn.com/server/trac/

را از این راه نصب کنید (زیرا تمامی ماژول های موجود در این بسته با یکدیگر کاملا همخوانی داشته و در حین Trac توصیه می شود

در آدرس فوق بر اساس بسته ارائه شده Trac با پیغام های خطای گوناگونی مواجه نخواهید شد). نحوه نصب قدم به قدم Trac اجرای

را نیز در این windows authentication نیز ذکر شده است که چند تنظیم بسیار ساده می باشند. بعلاوه امکان یکپارچگی با حالت

حالت خواهید داشت که مزیت امنیتی بسیار بزرگی است.

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٧٣

Trac در Wiki مدیریت

و قالب های پشتیبانی شده در آن وجود دارد که قصد تکرار آنرا در این فصل Wiki جهت کار با Trac راهنمای کاملی در برنامه

در بالای صفحه کلیک کرده و در صفحه باز شده در قسمت Help/Guide بر روی لینک ، Trac نخواهیم داشت. پس از ورود به

آشنا Wiki کلیک نمائید. در اینجا با لیست کاملی از قالب های ساخت Wiki Formatting بر روی لینک Table of contents

می توان از فرمت زیر استفاده کرد: Wiki خواهید شد. برای مثال برای ایجاد یک جدول در

||Cell 1||Cell 2||Cell 3||

||Cell 4||Cell 5||Cell 6||

که خروجی نهایی صفحه در این حالت به صورت زیر خواهد بود:

Cell 1 Cell 2 Cell 3

Cell 4 Cell 5 Cell 6

کلیک کنید، ادیتور باز شده به کمک نوار ابزار Edit this page لازم به ذکر است هنگامیکه که در پایین هر صفحه بر روی دکمه

را بدون نیاز به حفظ کردن آنها در اختیار شما قرار می دهد (شکل ۵). اگر این نوار ابزار را در Wiki بالای آن پرکاربردترین قالب های

وارد نمائید. Trusted sites در قسمت Security ویندوز سرور مشاهده نم یکنید، آدرس سایت را باید توسط گزینه IE برنامه

Trac در برنامه Wiki شکل ۵- ادیتور

با آن برخورد خواهیم داشت، ایجاد لینک به یک صفحه جدید و ایجاد صفحه ای کاملا Wiki یکی از مهم ترین مواردی که در یک

را شنیده اید. در حالت CamelCase جدید است. اگر با اصول نامگذاری توابع در زبان های برنامه نویسی آشنا باشید احتمالا نام

در هنگام ایجاد . ThisPage فاصله بین کلمات حذف و اولین کاراکتر آنها با حرف بزرگ نوشته می شود برای مثال ، CamelCase

را تشخیص داده و به صورت لینک هایی خاکستری با یک CamelCase به صورت خودکار موارد Trac برنامه ، Wiki صفحات

Create this علامت سؤال نمایش می دهد. با کلیک بر روی آنها به صفحه جدیدی رهنمون خواهیم شد که با کلیک بر روی دکمه

امکان ایجاد محتوای صفحه جدید به سادگی فراهم خواهد شد. ، page

به صورت خودکار تبدیل به لینک شوند پیش از آنها یک علامت تعجب قرار دهید. این علامت CamelCase اگر نمی خواهید عبارات

تنها هنگام ویرایش صفحه نمایش داده م یشود.

کلیک نمائید. Index در منوی اصلی بالای صفحه، بر روی لینک ، Trac برای مشاهده لیست صفحات ایجاد شده در برنامه

همچنین برای مشاهده لیست تغییرات انجام شده بر روی هر صفحه و مشاهده نگار شهای مختلف آ نها می توان بر روی دو لینک

.( در منوی اصلی بالای هر صفحه کلیک کرد (شکل ۶ Last change و History

جهت مشاهده تغییرات Next Change و Previous change لینک های ، Wiki دو نگارش یک صفحه Diff در صفحه

نگارش های قبلی و بعدی نیز مهیا هستند.

با سایر ابزارها SVN فصل ٨ – یکپارچگی

٧۴

سایت. Wiki شکل ۶- مشاهده ریز تغییرات انجام شده بر روی یک صفحه

Trac ردیابی وظایف در

گروهی از برنامه نویس ها برای مدیریت پروژه خود از این نوع .(forums) احتمالا با انجمن های بحث و گفتگو در اینترنت آشنایی دارید

سیستم ها استفاده م یکنند. برای مثال حداقل چهار بخش مختلف تازه ها، گزارش خطاها، راهنمای عمومی کاربران و بخش پیشنهاد

__________نیز به صورت یکپارچه چنین ویژگی هایی را با دیدگاه های ویژه مدیریت پروژه Trac . ویژگی های جدید را در این انجمن ها می توان دید

به صورت بسیار پیشرفته تری می توان جهت ارائه راهنمای سیستم به کاربران استفاده کرد. اشخاص می توانند Wiki ارائه می دهد. از

توسط یک بلیط جدید مطلب جدیدی را گزارش دهند. اینبار به صورت ساخت یافته تر حالت های پیش فرض خطا، پیشنهادات و وظایف را

می توان مشاهده کرد که اینها نیز قابلیت تغییر و سفارشی سازی را نیز دارا هستند. هر مطلب ارسال شده را م یتوان به یکی از اعضای تیم

انتساب داد و همچنین افرادی که علاقمند باشند می توانند نظرات خود را پیرامون مطلب ارسالی بیان کنند. در ادامه این موارد را بررسی

خواهیم کرد.

الف) سیستم بلیط

.( می توان بلیط جدیدی را ایجاد نمود (شکل ۷ New ticket با کلیک بر روی لینک Trac در

View در این صفحه ابتدا کاربر، عنوانی را وارد می نماید. از این عنوان در نمایش لیست بلی طها در برنامه استفاده می شود (لینک

سپس کاربر نوع بلیط را انتخاب کرده و توضیحات مربوطه را وارد م یکند. امکان الصاق .(Trac در منوی بالای صفحه برنامه Tickets

و غیره نیز در این صفحه پیش بینی شده است. بعلاوه امکان نظر دهی سایران کاربران نیز (Cc) فایل، انتساب آن به افراد پروژه، رونوشت

در این صفحه پس از ارسال میسر است (همانند یک انجمن).

وجود داشت تنها Wiki پس از ثبت، شماره ای خودکار به بلیط ها انتساب داده می شود و اگر زمانی نیاز به ارجاع به یکی از بلیط ها در

در این مثال به صورت خودکار لینکی به بلیط شماره یک ایجاد خواهد .(ticket: کافی است شماره بلیط را به صورت 1# وارد کرد (و یا 1

شد.

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٧۵

Trac شکل ۷- ایجاد یک بلیط جدید در

در صفحه ثبت بلیط اگر دقت کرده باشید یک سری فیلد از پیش تعریف شده مانند میزان اهمیت، قسمت ویژ های از پروژه (زیر سیستم)

و غیره را می توان مشاهده نمود. برای تغییر این پیش فرض ها حداقل دو راه وجود دارد. (component) که در اینجا مورد بحث است

از طریق خط فرمان و یا ویرایش بانک اطلاعاتی برنامه به صورت مستقیم. این برنامه در مسیر زیر قرار دارد (اگر از trac-admin اجرای

که پیشتر توضیح داده شد، استفاده م یکنید): VisualSVN server نصب شده توسط Trac

C:\>"C:\Program Files\VisualSVN Server\trac\python\python.exe" "C:\Program Files

\VisualSVN Server\trac\python\scripts\trac-admin-script.py" trac-admin

وارد شده اید: trac-admin اکنون به محیط خط فرمان برنامه

Welcome to trac-admin 0.11

Interactive Trac administration console.

Copyright (c) 2003-2008 Edgewall Software

Type: '?' or 'help' for help on commands.

Trac [C:\trac-admin]>

لیست بلی طها را نمایش م یدهد و یا با استفاده از دستور زیر می توان مقداری موجود را ، ticket_type list در اینجا برای مثال دستور

به مقداری جدید تبدیل کرد:

ticket_type change <value> <newvalue>

می توان بدست آورد. Trac در خط فرمان برنامه مدیریتی help لیستی از دستورات قابل اجرا را با تایپ

با سایر ابزارها SVN فصل ٨ – یکپارچگی

٧۶

برنامه را مستقیما و بصری ویرایش کنید (یا خصوصا اطلاعات فارسی را به سادگی SQLite اگر علاقمند باشید که بانک اطلاعاتی

را از آدرس زیر دریافت کنید: SQLiteSpy وارد نمائید)، ابتدا برنامه رایگان

http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index

قرار دارد. این بانک را توسط برنامه باز نمائید. C:\Trac\MyProject\db برای نمونه در مسیر Trac بانک اطلاعاتی سایت

همانطور که در تصویر نیز مشخص است، رکوردهای جداول مختلف این بانک اطلاعاتی را به سادگی می توان توسط این برنامه ویرایش

را فشرده و مقدار موجود را ویرایش کنید). F کرده و تغییر داد (بر روی هر مقدار دکمه 2

. SQLite جهت مدیریت یک بانک اطلاعات SQLiteSpy شکل ۸- برنامه رایگان و بسیار سریع

موجود است که بتوان از طریق خود برنامه و محیط وب این Trac نیز برای Web Admin Plugin علاوه بر این روش ها یک

تغییرات را اعمال نمود.

http://trac.edgewall.org/wiki/WebAdmin

در آدرس زیر مشغول به فعالیت است: Trac سایتی نیز به این نوع فعالی تها و توسعه افزودن یهای مخصوص

http://trac-hacks.org/

نکته:

امکان دریافت ایمیل اطلاع رسانی پس از ایجاد هر بلیط و یا انجام تغییرات بر روی آنها نیز میسر است. برای این منظور باید فایل

آنرا فعال کرد: notification را گشوده و قسمت tarc.ini

[notification]

smtp_enabled = true

smtp_server = mail.mycompany.com

smtp_from = trac@mycompany.com

smtp_replyto = myproj@mycompany.com

smtp_always_cc = projectmanager@mycompany.com, qa@mycompany.com

always_notify_owner = true

always_notify_reported = true

always_notify_updater = true

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٧٧

برای ارسال ایمیل به سایر کاربران برنامه، آنها باید قسمت مربوط به تنظیمات کاربری را تکمیل نموده و ایمیل خود را وارد کنند. برای

مراجعه نمود. Trac در منوی اصلی Settings این منظور باید به لینک

نیز مهیا است. به این صورت (RSS feed) امکان دریافت لینک تغذیه خبری سایت ، Timeline علاوه بر آن در انتهای صفحه

بدون فعال سازی قسمت ارسال ایمیل های اطلاع رسانی نیز م یتوان از اخبار تغییرات سایت مطلع شد. برای مثال م یتوان از خبرخوان

استفاده کرد: FeedDemon رایگان و بسیار حرف های

http://www.newsgator.com/Individuals/FeedDemon/Default.aspx

نیز امکانات یک خبرخوان استاندارد را به صورت یکپارچه به شما ارائه م یدهد (هر چند از لحاظ سفارشی سازی و Outlook و یا 2007

نیز مجهز به خبرخوان هستند. IE و Firefox قابل مقایسه نیست). همچنین آخرین نگار شهای FeedDemon امکانات ویژه با

(milestones) ب) زمان های ارزیابی

فراهم می کنند. بر اساس تعداد بلیط های بررسی و رفع شده در Trac امکان گروه بندی بلیط ها و بررسی آن ها را در Milestones

و یا ویرایش نمونه های از پیش تعریف milestones میزان پیشرفت آن مشخص می شود (شکل ۹). نحوه ایجاد ، milestone یک

مربوطه را نیز milestone ، شده را در قسمت قبل بررسی کردیم. همچنین می دانیم که هنگام تعریف و ایجاد یک بلیط جدید در برنامه

کارراهه) در منوی اصلی برنامه اقدام ) roadmap می توان از طریق لینک milestones می توان انتخاب و مشخص کرد. برای مشاهده

های خاتمه نیافته و درصد پیشرفت آنها قابل بررسی است. milestone ، کرد. از طریق این قسمت

.Trac در milestones - شکل ۹

منوی اصلی برنامه مراجعه کرد. Timeline برای مشاهده ریز فعالی تهای روزانه انجام شده م یتوان به قسمت

نیز مهیا است. برای مثال iCalendar به صورت فرمت استاندارد Roadmap امکان دریافت تقویم فعالیت ها در انتهای صفحه

این فرمت استاندارد را پشتیبانی م یکند. Outlook برنامه

ج) مرور مخزن کد

در این فصل از کتاب م یتوان برشمرد، رابط دسترسی تحت وب بسیار پیشرفت هتر آن برای Trac مهم ترین دلیلی که جهت پرداختن به

.( می باشد (شکل ۱۰ mod_dav_svn نسبت به ابزار استاندارد SVN کار با یک مخزن کد

با سایر ابزارها SVN فصل ٨ – یکپارچگی

٧٨

.Trac شکل ۱۰ - مرور مخزن کد در

را بخاطر داشته باشید، یکی از مواردی که هنگام نصب باید مشخص شود مسیر مخزن کد است. پس از نصب، Trac اگر مراحل نصب

می توان از طریق وب به مخزن کد دسترسی داشت، تغییرات را مشاهده نمود، توضیحات ، Trac منوی browse source در قسمت

را به صورت آنلاین و در مرورگر وب خود مشاهده نمود. diff ارائه شده کاربران را بررسی کرده و حتی عملیات

به صورت زیر درخواهد آمد: SVN عملیات متداول استفاده از Trac با استفاده از

۱یک بلیط جدید را ایجاد کنید.

بازه زمانی انجام یا زمان ارزیابی) و برنامه نویس آنرا مشخص کنید. ) milestone -۲

را جهت کار بر روی این بلیط ایجاد نمائید. (branch) ۳- انشعابی

۴- تغییرات را انجام داده و به انشعاب اعمال کنید.

ادغام کنید. trunk ۵- پس از پایان کار، تغییرات را با

۶- بلیط را خاتمه دهید.

را Wiki این روش در مورد رفع باگ ها و یا پیشنهادهای بهبود برنامه یکسان است. در مورد بهبودهای پیشنهادی بهتر است یک صفحه

به آن اختصاص داده، موارد را در آن مطرح کنید و با توجه به قابل ویرایش بودن آن توسط سایر اعضای تیم، نظرات آنها را جویا شوید.

که در مورد آن ticket: منعکس کنید ( روش برای مثال 1 Wiki سپس به ازای هر مورد یک بلیط جدید ایجاد کرده و لینک آنها را در

توضیح داده شد). این بلی طها با نوع پیشنهاد مشخص م یشوند (اگر این نوع به صورت پیش فرض وجود ندارد، آنرا به بانک اطلاعاتی

تغییرات به مخزن کد، commit برنامه اضافه کنید). با توجه به اینکه در این سیستم هر بلیط باید دارای یک انشعاب مجزا باشد، هنگام

را مطابق بلیط شماره ۲۹ ایجاد کرده و سپس feature- در توضیحات مربوطه شماره بلیط را نیز ذکر نمائید. برای مثال انشعاب 29

،Addresses ticket #29 by implementing spell checking تغییرات انجام شده باید برای مثال commit توضیحات

باشد. در این حالت دقیقا می دانیم که چه کاری قرار است انجام شود (توسط ایجاد یک بلیط جدید)، موعد آن چه زمانی است

چه شخصی باید بر روی آن کار کند (انتساب بلیط به شخص) و همچنین با توجه به ایزوله شدن کار در یک انشعاب مجزا ،(milestone)

و محیط تحت وب آن م یتوان نظرات دیگران را Trac تداخلی در خط اصلی تولید پدید نخواهد آمد (شکل ۱۱ ). بعلاوه توسط ، trunk از

درباره یک بلیط جویا شد و به بحث و تبادل نظر پرداخت. پس از پایان کار و اعمال تغییرات و ادغام نهایی، م یتوان بلیط را بست (قسمت

roadmap درصد پیشرفت کار را نیز همانطور که پیشتر عنوان شد م یتوان از قسمت .(resolve as در صفحه بلیط و گزینه action

مربوطه، بررسی کرد. milestone و مشاهده

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٧٩

.Trac شکل ۱۱ – پیاده سازی ایده ایجاد انشعاب به ازای هر بلیط جدید در

هم گفته م یشود). اینجا نیز همواره گزارش یک defects به آنها Trac روال کاری برخورد با گزارشات خطاها اندکی متفاوت است (در

خطا (حتی اگر توسط یکی از اعضای تیم صورت گیرد) باید با ایجاد یک بلیط جدید آغاز گردد. سپس باید پیش از اقدام بررسی شود آیا این

خطا پیشتر گزارش شده است؟ آیا گزارش خطا معتبر است؟ آیا تیم برنامه نویسی می تواند آنرا مجددا تولید کند؟ شدت آن در چه حدی

معرفی (duplicate) مربوط به یک بلیط می توان آنرا به صورت مورد تکراری action است؟ اگر گزارش خطا تکراری است در قسمت

کرده و کار را خاتمه داد (هر چند بهتر است شماره بلیط معادل را نیز در اینجا ذکر کرد). اگر گزارش خطا معتبر نبود یا قابل تکرار تشخیص

را انتخاب کرده و به کار این مورد نیز خاتمه داد. سایر موارد انتساب بلیط به یک wontfix گزینه action داده نشد م یتوان در قسمت

مربوطه همانند قبل در اینجا نیز صورت م یگیرد. ایجاد انشعاب جهت رفع خطاها با ایجاد انشعاب milestone برنامه نویس یا تعیین

جهت معرفی یک ویژگی جدید اندکی متفاوت است. در هنگام ایجاد انعشاب جهت کار بر روی یک ویژگی جدید همواره باید انشعاب بر

اساس آخرین نگارش موجود در مخزن کد صورت گیرد، اما در حالت بررسی یک خطا باید انشعاب از نگارش مربوط به آن خطا ایجاد گردد.

در سیستم به درستی انجام (tags) شاید به نظر رسد که پیدا کردن نگارش مربوطه اندکی مشکل است، اما اگر مباحث ایجاد برچسب ها

شده باشد، کاربر هنگام گزارش خطا و ایجاد یک بلیط جدید، نگارش مربوطه را نیز انتخاب خواهد کرد (که این نگارش باید معادل باشد با

شده نیز لحاظ commit یکی از برچس بهای ایجاد شده). جهت ایجاد انشعاب نیز بهتر است شماره بلیط در نام انشعاب و همچنین موارد

.(bug- گردد (برای مثال ایجاد انشعاب 51

SVN در bugtraq آشنایی با خواص

که پیشتر درباره آنها بحث شد نیز میسر است. Hooks با بکارگیری مباحث SVN و تعامل با آن از طریق Trac امکان به روز رسانی

اسکریپتی جهت این امر توسعه یافته است که از آدرس زیر قابل دریافت است: Trac در سایت

http://trac.edgewall.org/browser/trunk/contrib/trac-post-commit-hook

برای bat همانطور که از فصل مربوطه به خاطر دارید باید یک فایل ) SVN مربوط به Hooks پس از تنظیم و قرار دادن آن در پوشه

،REPOS ، برای اجرای اسکریپت کاملا قید شود و همانند راهنمای ابتدای این اسکریپت python اینکار تهیه نمود، مسیر کامل

یک سری از واژ ههای مخصوص پیغام commit نیز باید تنظیم و مقدار دهی شوند) ، پس از هر TRAC_ENV و REV

به همراه شماره بلیط closes, fixes اعمال خواهند شد. برای مثال Trac تشخیص داده شده و به صورت خودکار به commit

This correction fixes #2 and # یا 3 Close # مربوطه، به صورت خودکار سبب بسته شده آن بلیط خواهند شد. برای مثال 1

سبب افزوده شدن یک پیغام به بلیط مربوطه می شوند. see و refs ، references ، re ،addresses و یا کلمات

فیلد شماره ، TortoiseSVN مربوط به برنامه commit اطلاعات به مخزن کد، در صفحه commit اگر علاقمند باشید هنگام

بلیط متناظر نیز ذکر شود، باید به صورت زیر عمل کرد:

بر روی پوشه پروژه کلیک راست کرده و سپس گزینه زیر را انتخاب کنید:

TortoiseSVN → Properties

با سایر ابزارها SVN فصل ٨ – یکپارچگی

٨٠

را انتخاب کرده bugtraq:message کلیک نمائید تا بتوان خاصیت جدیدی را افزود. خاصیت New در صفحه باز شده بر روی دکمه

و مقدار آنرا برای مثال مساوی عبارت زیر قرار دهید:

http://localhost:82/trac/MyProject/ticket/%BUGID%

کلیک کنید. OK سپس گزینه اعمال به صورت بازگشتی را نیز انتخاب نموده و بر روی دکمه

فوق وارد نمائید URL را انتخاب و مقدار آنرا نیز همانند bugtraq:url کلیک کرده و خاصیت new اکنون مجددا بر روی دکمه

.( (شکل ۱۲

. TortoiseSVN توسط bugtraq:url شکل ۱۲ - اضافه کردن خاصیت

یک ، commit ما اشاره می کند. پس از اعمال این خواص، هنگام Trac در حقیقت به آدرس بلیط ایجاد شده در سیستم URL این

و ذکر شماره بلیط Commit نیز ظاهر خواهد شد (شکل ١٣ ). پس از Bug-ID/Issue-Nr با برچسب (TextBox) جعبه متنی

به گزارش مربوطه Bug-ID مراجعه کنیم، یک ستون جدید تحت عنوان TortoiseSVN در show log مربوطه، اگر به قسمت

ظاهر شده، آدرس قابل کلیک متناظر نیز ظاهر خواهد شد که در اینجا log اضافه شده است. با انتخاب هر یک از ردیف های

.( به صورت خودکار با عدد بلیط مربوطه مقدار دهی م یشود (شکل ۱۴ %BUGID%

را به عبارت دلخواه خود مقدار bugtraq:label دارید، باید خاصیت bug-id/Issue-Nr اگر نیاز به تغییر متن برچسب پیش فرض

هنگام bug-id/Issue-Nr و اگر می خواهید در صورت خالی بودن جعبه متنی (TortoiseSVN → Properties) دهی کنید

را باید مقدار دهی نمود. bugtraq:warnifnoissue اخطاری به کاربر نمایش داده شود خاصیت commit

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٨١

. TortoiseSVN در Commit به صفحه Bug-ID/Issue-Nr شکل ۱۳ – افزوده شدن جعبه متنی

.TortoiseSVN در log به گزارشات Bug-ID شکل ۱۴ - افزوده شدن ستون

(Continuous Integration) فصل ٩ – یکپارچگی مداوم و پیوسته

٨٢

(Continuous Integration) فصل ۹ – یکپارچگی مداوم و پیوسته

مقدمه:

نیز می باشد. در Extreme Programming یکپارچگی مداوم یکی از مفاهیم اصلی کار تیمی و همچنین یکی از اصول متدولوژی

یک تیم در طول روز کدهای بسیاری با مخزن کد هماهنگ خواهند شد. با استفاده از روش های یکپارچگی مداوم، پس از هر هماهنگ

سازی با سرور مخزن کد، عملیات کامپایل پروژه و همچنین انجام تست های مربوطه به صورت خودکار صورت گرفته و نتایج موفقیت یا

شکست آن به برنامه نوی سها یا تیم مدیریتی پروژه ارسال م یگردد. به این صورت زمان نهایی برای یکپارچگی پروژه و تحویل آن به

CruiseControl.NET از برنامه Continuous Integration Server حداقل خواهد رسید. در این فصل برای راه اندازی یک

است که تحت اکثر سیست م CruiseControl برنامه جاوای (C#) نگارش ویندوزی CruiseControl.NET . استفاده خواهیم کرد

عامل های موجود نگار شهای ویژه آن قابل دسترسی است. این برنامه سورس باز از آدرس زیر قابل دریافت است:

http://ccnet.thoughtworks.com/

http://cruisecontrol.sourceforge.net/

استفاده نمایند. این برنامه را از آدرس زیر می توانید CCTray همچنین کلاینت ها برای دریافت وقایع مربوطه می توانند از برنامه

دریافت کنید:

http://confluence.public.thoughtworks.org/display/CCNET/CCTray

نیز می تواند برای این مقصود مورد استفاده قرار گیرد. نگارش حرفه ای این teamcity علاوه بر محصول بسیار متداول فوق، برنامه

برنامه رایگان است. آدرس دریافت برنامه:

http://www.jetbrains.com/teamcity

متداول نبوده و صرفا به معرفی CruiseControl.NET محصولات سورس باز دیگری نیز در این ارتباط موجود هستند که به اندازه

لینک های دریافت آنها اکتفا خواهد شد:

Draco.NET http://draconet.sourceforge.net/

Hippo.NET http://hipponet.sourceforge.net/

CruiseControl.NET نصب و راه اندازی

دریافت نمائید (این آدرس ها به لینک زیر thoughtworks را از سایت CCTray و CruiseControl.NET فایل های نصاب

ختم خواهند شد).

http://sourceforge.net/projects/ccnet/

بر (Internet Information Services) IIS جهت نصب بر روی سروری که CruiseControl.NET لازم به ذکر است

برای نصب بر روی کلاینت های متصل به CCTray و (Web Dashboard روی آن نصب شده است (برای راه اندازی

جهت اجرا Microsoft.NET Framework Version طراحی شد هاند. این برنام هها حداقل به 2.0 CruiseControl.NET

نیاز دارند.

و پذیرفتن پیش فرض های آن ها انجام Next نصب مقدماتی هر دو مورد نکته خاصی ندارد و با چندبار کلیک کردن بر روی دکمه

خواهند شد.

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٨٣

آن می باشد. اگر برنامه را ccnet.config تنظیمات فایل CruiseControl.NET پس از __________نصب مقدماتی، مهمترین قسمت کار با

در مسیر پیش فرض آن نصب کرده باشید، این فایل متنی در آدرس زیر قابل مشاهده خواهد بود:

C:\Program Files\CruiseControl.NET\server\ccnet.config

در ادامه چندین حالت مختلف تنظیمات این فایل را بررسی خواهیم کرد:

برای پروژ ههای دلفی ccnet الف) تنظیمات

ختم می شود، توانایی های آن محدود به برنامه های دات نت مایکروسافت نیست و برای مثال .Net برخلاف اسم این برنامه که به

می توان از آن برای کنترل مداوم پروژه های دلفی نیز استفاده کرد. حتی اگر با دلفی برنامه نویسی نمی کنید، مطالب این قسمت را مطالعه

برای این ccnet.config نمائید زیرا اصول آن برای سایر محی طهای توسعه نیز مشترک است. خطوط زیر محتوای تنظیم شده فایل

منظور هستند:

<cruisecontrol>

<!-- This is your CruiseControl.NET Server Configuration file. Add

your projects below! -->

<project name="Project1">

<webURL>http://localhost/ccnet/</webURL>

<sourcecontrol type="svn">

<trunkUrl>file:///C:/SVNRepos/Project1/trunk</trunkUrl>

<workingDirectory>c:\Sandbox\Project1</workingDirectory>

<executable>c:\program

files\subversion\bin\svn.exe</executable>

<username>user1</username>

<password>pass1</password>

<autoGetSource>true</autoGetSource>

<tagOnSuccess>false</tagOnSuccess>

<tagBaseUrl>file://projects/project1/tags</tagBaseUrl>

<timeout>12000000</timeout>

</sourcecontrol>

<triggers>

<intervalTrigger seconds="60" />

</triggers>

<tasks>

<exec>

<executable>"c:\program

files\Borland\BDS\4.0\bin\dcc32.exe"</executable>

<baseDirectory>C:\Sandbox\Project1</baseDirectory>

<buildArgs>-q project1.dpr</buildArgs>

<buildTimeoutSeconds>10</buildTimeoutSeconds>

</exec>

</tasks>

</project>

</cruisecontrol>

(Continuous Integration) فصل ٩ – یکپارچگی مداوم و پیوسته

٨۴

در این فایل موارد زیر را مشاهده خواهید کرد:

عبارت توضیحات

نام دلخواه پروژ های که بر روی آن مشغول به کار هستیم. project name

برنامه web dashboard آدرس webURL

sourcecontrol تنظیمات

sourcecontrol type

استفاده شده است. SVN نوع برنامه کنترل سورس کد مورد استفاده. در اینجا از

نیز می تواند CVS مایکروسافت و یا SourceSafe با ccnet (برای مثال

یکپارچه شود)

trunkUrl

مخزن کد (فرض بر این است که پروژه خود را تحت کنترل trunk آدرس

آنرا در این قسمت باید trunk قرار داده اید و اکنون آدرس SVN مخزن کد

وارد کنید).

در آنجا صورت گرفته است. checkout مکان فیزیکی پروژه شما که اولین workingDirectory

بر روی سیستم. (svn.exe) SVN مسیر فایل اجرایی برنامه Executable

نام کاربری جهت اتصال به مخزن کد Username

کلمه عبور کاربر فوق جهت اتصال به مخزن کد Password

autoGetSource SVN آیا برای کامپایل پروژه آخرین سورس کدها را به صورت خودکار از

دریافت کند؟

ایجاد شود؟ SVN آیا به ازای هر کامپایل موفقیت آمیز یک برچسب جدید در tagOnSuccess

آدرس ریشه اصلی برچسب ها در مخزن کد شما tagBaseUrl

حداکثر زمان مجاز تعیین شده جهت انجام عملیات بر اساس میلی ثانیه Timeout

triggers تنظیمات

intervalTrigger SVN به ccnet تعیین کننده فواصل زمانی معینی است برحسب ثانیه که

مراجعه کرده و آخرین تغییرات هماهنگ شده را دریافت م یکند.

tasks تنظیمات

مسیر کامپایلر مورد استفاده Executable

مسیر فیزیکی پروژه baseDirectory

آرگومان های کامپایل کردن پروژه buildArgs

حداکثر زمان مجاز تعیین شده جهت انجام عملیات بر حسب ثانیه buildTimeoutSeconds

خوانده شده و سرویس ccnet.config را اجرا کنید تا فایل CruiseControl.NET پس از ذخیره سازی تغییرات فوق، برنامه

مربوطه اجرا گردد.

Start → All programs → CruiseControl.NET

قرار گرفته است. برای مثال تغییراتی را اعمال کرده و آنرا با سرور CruiseControl.NET اکنون مخزن کد شما تحت کنترل

متوجه تغییرات شده و پروژه را کامپایل می کند. CruiseControl.NET ، پس از لحظ های . (commit) هماهنگ نمائید

در اینجا نتایج را به روش های مختلفی می توان مشاهده کرد. برای مثال پیگیری اطلاعات نمایش داده شده در کنسول برنامه و یا

ایجاد شده CruiseControl.NET هنگام نصب ASP.Net آن در آدرس بعد (این وب سایت web dashboard مراجعه به

است):

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٨۵

http://localhost/ccnet

نخواهید بود و باید آنرا در قسمت IIS توسط 6 ASP.Net در ویندوز سرور ۲۰۰۳ به صورت پیش فرض قادر به اجرای برنامه های

فعال کنید و یا م یتوانید از دستور خط فرمان زیر نیز استفاده نمائید: IIS کنسول مدیریتی webservice extensions

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -i -enable

با خطای زیر متوقف خواهد شد: ccnet اولین تلاش جهت اجرای سایت ، IIS در ویندوز سرور ۲۰۰۸ و 7

HTTP Error 500.23 - Internal Server Error. An ASP.NET setting has been detected that does not apply in

Integrated managed pipeline mode.

سایت انجام شود: web.config برای رفع این خطا دستور خط فرمان زیر را اجرا کنید تا تنظیمات لازم بر روی فایل

c:\windows\system32\inetsrv\Appcmd migrate config "default web site/ccnet"

افزوده خواهند شد: web.config پس از اجرای این دستور، تگ های زیر به صورت خودکار به فایل

<system.webServer>

<handlers>

<add name="*.xml_*" path="*.xml" verb="*"

type="ThoughtWorks.CruiseControl.WebDashboard.MVC.ASPNET.HttpHandler,ThoughtWorks.C

ruiseControl.WebDashboard" preCondition="integratedMode,runtimeVersionv2.0" />

<add name="*.aspx_*" path="*.aspx" verb="*"

type="ThoughtWorks.CruiseControl.WebDashboard.MVC.ASPNET.HttpHandler,ThoughtWorks.C

ruiseControl.WebDashboard" preCondition="integratedMode,runtimeVersionv2.0" />

</handlers>

<validation validateIntegratedModeConfiguration="false" />

</system.webServer>

نیز سازگار خواهد بود و به راحتی اجرا خواهد شد. IIS اکنون سایت با 7

جهت مشاهده علت این تغییرات به آدرس زیر مراجعه کنید:

http://learn.iis.net/page.aspx/381/aspnet-20-breaking-changes-on-iis-70/

است. پس از نصب و اجرای آن، آیکون برنامه CCTray راه دیگر جهت مطلع شدن از وقایع رخداده، استفاده از برنامه سمت کلاینت

کنار ساعت ویندوز نمایان خواهد شد. پس از دوبار کلیک بر روی آن، در صفحه باز شده مسیر زیر را جهت معرفی سرور باید پیمود (شکل

:(۱

File → Settings → Build projects → Add → Add server

لیستی از پروژه های OK به برنامه انتخاب نمائید. پس از کلیک بر روی دکمه ccnet در اینجا یکی از سه روش را جهت معرفی سرور

تحت کنترل نمایش داده خواهد شد که پس از انتخاب یکی از آنها، برنامه کار مطلع سازی خودکار خویش را شروع خواهد نمود.

مخصوص ویندوز ویستا نیز برای اینکار در آدرس زیر قابل دریافت است: Gadget یک ، cctray علاوه بر

http://code.google.com/p/ccnet-monitor-sidebar-gadget/

(Continuous Integration) فصل ٩ – یکپارچگی مداوم و پیوسته

٨۶

.cctray به برنامه ccnet شکل ۱– معرفی کردن سرور

VS.Net برای پروژ ههای ccnet ب) تنظیمات

قسمت عمد های از تنظیمات و توضیحات در اینجا نیز همانند قسمت الف است. تنها تفاوت موجود در تنظیمات این فایل برای کار با

آن است که در ادامه بررسی خواهد شد. tasks قسمت ، VS.Net پروژه های

<tasks>

<msbuild>

<executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>

<workingDirectory>C:\Sandbox\Project1</workingDirectory>

<projectFile>TestSystem.sln</projectFile>

<buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>

<targets>Build</targets>

<timeout>15</timeout>

<logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsB

uild.dll</logger>

</msbuild>

</tasks>

نصب می شود استفاده شده است. .Net framework مایکروسافت که همراه MSBuild در تنظیمات قبل بجای کامپایلر دلفی از

بر روی سرور نخواهد بود. VS.Net بنابراین نیازی به نصب

را از XMLLogger نیز وجود دارد. این MsBuild.XmlLogger همانطور که در تنظیمات فوق ملاحظه می کنید ارجاعی به

آدرس زیر م یتوانید دریافت کنید:

http://ccnetlive.thoughtworks.com/MSBuildXmlLogger-Builds/

آنرا در پوشه اصلی پروژه خود کپی کنید. dll سپس فایل

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٨٧

web تنظیم کنیم. این فایل در مسیر نصب MSBuild را جهت نمایش بهتر خروجی dashboard.config در ادامه باید فایل

برنامه قرار دارد. dashboard

<xslFileNames>

<xslFile>xsl\compile-msbuild.xsl</xslFile>

</xslFileNames>

اضافه نمائید. در همین فایل سطر زیر را نیز اضافه نمائید: xslFileNames سطر فوق را به تگ

<xslReportBuildPlugin description="MSBuild Output"

actionName="MSBuildOutputBuildPlugin" xslFileName="xsl\msbuild.xsl" />

برنامه می توان تجربه کرد. web dashboard در MSBuild به این صورت خروجی دلپذیرتری را با

را به صورت زیر نیز تنظیم نمود: tasks را بر روی سرور نصب کرد هاید، م یتوان قسمت VS.Net اگر به هر دلیلی

<tasks>

<devenv>

<solutionfile>C:\Sandbox\Project1</solutionfile>

<configuration>Debug</configuration>

<buildtype>Build</buildtype>

<executable>C:\Program Files\Microsoft Visual Studio

8\Common7\IDE\devenv.com</executable>

<buildTimeoutSeconds>60</buildTimeoutSeconds>

</devenv>

</tasks>

Web Application projects نکته ای درباره

اگر سرویس پک ۱ ویژوال استودیو ۲۰۰۵ را نصب کرده باشید و یا از ویژوال استودیو ۲۰۰۸ استفاده می کنید، به طور قطع دریافت هاید که

همانند ویژوال استودیو ۲۰۰۳ به مجموعه اضافه شده است. هنگام تحت کنترل قرار دادن Web Application projects مجددا

بر روی آن نصب نیست با مشکل مواجه خواهید شد. برای حل این مشکل VS.Net بر روی سروری که ccnet اینگونه پروژه ها توسط

را از یکی از کلاین تها از مسیر زیر دریافت Microsoft.WebApplication.targets فایل

C:\Program Files\MSBuild\Microsoft\VisualStudio\v8.0\WebApplications\

MS-Ajax و در مسیری مشابه مسیر فوق در سرور کپی نمائید (بدیهی است مسیر را باید به صورت دستی ایجاد کنید). همچنین اگر از

در پروژه خود استفاده کرد هاید، آنرا نیز باید بر روی سرور نصب نمائید.

(Continuous Integration) فصل ٩ – یکپارچگی مداوم و پیوسته

٨٨

ccnet ابزار جانبی تنظیمات

با استفاده از پروژه سورس باز زیر می توان تنظیمات ارائه شده در این فصل را به سادگی هرچه تمامتر و در اسرع وقت انجام داد (شکل

:(۲

http://www.codeplex.com/ccnetconfig

. CCNetConfig شکل ۲- نمایی از برنامه

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٨٩

با برنامه نویسی SVN فصل ۱۰ – دسترسی به

مقدمه:

نوشته شده است نیز م یتوان دسترسی داشت. برای مثال C آن که به زبان API با استفاده از SVN به تمامی امکانات مهیا در

استفاده م یکند. SVN برای دسترسی به API از این TortoiseSVN

در آدرس زیر م یتوان دسترسی داشت: C به زبان SVN برنامه API به آخرین مستندات

http://svn.collab.net/svn-doxygen/

نیز توسعه یافت هاند که از آن (wrapper) در سایر زبا نهای برنامه نویسی کتابخانه های محصورکننده ای API برای استفاده از این

کتابخانه مبتنی بر جاوا) اشاره کرد. ) SVNKit کتابخانه مبتنی بر دات نت) و ) SubversionSharp جمله م یتوان به

از آدرس زیر قابل دریافت است: SubversionSharp

http://www.softec.st/en/OpenSource/ClrProjects/SubversionSharp/

برای تهیه یک نسخه کاری از سورس کد کتابخانه فوق، علاوه بر تمامی روش هایی که تاکنون گفته شد، از دستور خط فرمان زیر نیز

می توان استفاده کرد:

svn co http://svn.softec.st/clr/trunk/SubversionSharp "C:\newPath"

نگارش دات نت ۲ این کتابخانه از آدر سهای زیر قابل دریافت است:

http://sharpsvn.open.collab.net/

http://www.pumacode.org/projects/svndotnet/

قابل دریافت است. http://svnkit.com همچنین نمونه مبتنی بر جاوا این نوع کتابخانه ها از سایت

API از طریق SVN نیز مستقیما با DelphiSVN و AnkhSVN و یا اگر از فص لهای قبل به خاطر داشته باشید افزودنی های

که از آدرس SVNCOM نیز توسط کتابخانه COM از طریق اشیاء SVN آن ارتباط برقرار می کنند. بعلاوه امکان برقراری ارتباط با

زیر قابل دریافت است نیز میسر است:

http://www.pushok.com/soft_svncom.php

را از طریق برنامه نویسی مرور خواهیم کرد. SVN در ادامه با ارائه چند برنامه کوتاه، نحوه برقراری ارتباط با

با برنامه نویسی SVN فصل ١٠ – دسترسی به

٩٠

جهت بدست آوردن لیست فای لهای یک نسخه کاری که با مخزن کد هماهنگ نشد هاند. C# مثال ۱ : برنامه

(http://sharpsvn.open.collab.net قابل دریافت از ) SharpSVN در این مثال فرض بر این است که ارجاعی از کتابخانه

خود افزوده اید. Console را به برنامه

using System;

using System.Collections.ObjectModel;

using SharpSvn;

namespace SVNTest

{

class Program

{

static void Main()

{

using (SvnClient client = new SvnClient())

{

Collection<SvnStatusEventArgs> changedFiles;

client.GetStatus(@"C:\osl\testPrj", out

changedFiles);

if (changedFiles != null)

foreach (SvnStatusEventArgs changedFile in

changedFiles)

{

switch (changedFile.LocalContentStatus)

{

case SvnStatus.Missing:

Console.WriteLine("Missing: " +

changedFile.Path);

break;

case SvnStatus.NotVersioned:

Console.WriteLine("NotVersioned: " +

changedFile.Path);

break;

}

}

}

}

}

}

ایجاد شده و سپس وضعیت فایلهای موجود در نسخه کپی محلی دریافت شده است. SVN در قطعه کد فوق یک شیء کلاینت

یک نسخه کاری commit دریافت و نمایش لیست لاگ های ارسالی هنگام C# مثال ۲: تابع

static void getLogs()

{

using (SvnClient client = new SvnClient())

{

Collection<SvnLogEventArgs> logItems;

client.GetLog(@"C:\osl\testPrj", out logItems);

if (logItems != null)

foreach (SvnLogEventArgs msg in logItems)

Console.WriteLine("{0} : {1}", msg.Author, msg.LogMessage);

}

}

Subversion مدیریت فایل های یک پروژه نرم افزاری با استفاده از

٩١

نویسنده، تاریخ و متن هر پیغام مشخص است. سپس با . RSS feed generator این مثال می تواند ایده ای باشد برای نوشتن یک

می توان خروجی استانداردی را تهیه نمود Argotic Syndication Framework استفاده از کتابخانه جامع

اگر در مثال فوق قصد داشتیم مستقیما به مخزن کد متصل شویم، سطر دریافت اطلاعات لا گها برای نمونه به شکل زیر تغییر

می کرد:

client.GetLog(

new Uri("file:///C:/Repositories/TestRepo/trunk" ),

out logItems);

جهت دریافت و نمایش آخرین شماره بازنگری مخزن کد C# مثال ۳: تابع

static void getInfo()

{

using (SvnClient client = new SvnClient())

{

SvnInfoEventArgs info;

client.GetInfo(

SvnTarget.FromString(

"file:///C:/Repositories/TestRepo/trunk" ),

out info);

if (info != null) Console.WriteLine("{0}",

info.LastChangeRevision);

}

}

اگر مخزن کد، تحت اختیار و مدیریت شما نباشد عموما مجوز نصب اسکریپ تهای قلاب را بدلایل امنیتی به شما نخواهند داد. کد فوق

می تواند ایده ای باشد برای برنامه ای که در فواصل زمانی مشخص مخزن کد را بررسی کرده و آخرین شماره بازنگری انجام شده را در

مقایسه با آخرین شماره گزارش شده، به شما اعلام م یکند (برای مثال به تیم برنامه نویسی ایمیل م یزند).

منابع و مآخذ

٩٢

منابع و مآخذ

1- Collins-Sussman B., Fitzpatrick B., Pilato M., "Version Control with Subversion",

web site, http://svnbook.red-bean.com/.

2- Smart J., "Java Power Tools", O'Reilly, 2008.

3- Mason M., "Pragmatic Version Control using Subversion", 2nd Edition, The

Pragmatic Programmers LLC, 2006.

4- Nagel W., "Subversion Version Control: Using the Subversion Version Control

System in Development Projects", Prentice Hall PTR, 2005.

5- SAM-BODDEN B., JUDD C., "Enterprise Java Development on a Budget:

Leveraging Java Open Source Technologies", APress, 2004.

6- Berlin D., Rooney G., "Practical Subversion", APress, 2006.

7- Murphy D., "Managing Software Development with Trac and Subversion", PACKT

Publishing, 2007.

8- HOLMES M., "Expert .NET Delivery Using NAnt and CruiseControl.NET", APress,

2005.__

Mohsen_mahyar@Yahoo.com

 

   + MOHSEN GHASEMI - ۸:٠٩ ‎ق.ظ ; ۱۳۸٩/۳/٢٩