مدیریت فایل های یک پروژه نرم افزاری با استفاده از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

/ 1 نظر / 62 بازدید
elnaz

kheli momnoon[منتظر]