ورود/ایجاد حساب کاربری
   منوی اصلی
· خانه
· لیست کاربران
· جستجو
· آمار مشاهدات
· آرشیو مقالات


- شرح
· راهنمای نویسندگان
· درباره ما

   همکاری با نشریه
در صورتی که مایل به همکاری با نشریه هستید، می‌توانید در لیست پستی نشریه عضو شده و در جریان امور قرار گیرید. برای اطلاعات بیشتر، اینجا کلیک کنید.

   کاربران
سردبیر
هیچ مدیر کمکی حاضر
همکاران
هیچ مدیر کمکی حاضر
اعضا:
جدیدترین:جدید امروز:0
جدیدترین:جدید دیروز:0
جدیدترین:مجموع:2471
جدیدترین:جدیدترین:
ufumenarayu
اعضا:حاضر
اعضا:اعضا:0
مهمان‌ها:مهمان‌ها:7
مجموع:مجموع:7
کاربران حاضر
هیچ کاربر حاضری وجود ندارد

   ورود کاربران




 


 برای ورود مشکل دارید؟
 ثبت نام کاربران جدید

آشنایی با Subversion بخش هشتم

(1063 مجموع کلمات موجود در متن)
(7739 بار مطالعه شده است)  نسخه چاپی

آشنایی با Subversion بخش هشتم

حالتهای مختلف استفاده از چندین دستور مهم

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


سوئیچ r

این سوئیچ در واقع شماره revision را مشخص می‌کند. حتما خــاطرتان هست که گفتیم با هر بار commit بر روی مخزن فایل، یک عدد به شماره قبلی افزوده می‌شود و شما در هر بار تماس با مخزن فایل در واقع دارید با آخرین شماره و در واقع جدیدترین نسخه کار ‌می‌کنید.

خوب، حال فرض کنید مثلا بخواهید نسخه کاری خود را به حالت ۵ سال پیــش برگـــردانید. بله،‌ خیـلی اتفاق می‌افتد که مثلا به عنوان برنامه‌نویس بخواهید از توابع موجود در نسخــه کــاری ۵ سال پیش استفاده کنید، توابعی که به هر دلیلی دیگر امروز وجود ندارند و از پروژه شما حذف شده‌اند. اگر شماره نسخه ای که مایل به کار با آن هستید را می‌دانید، مثلا نسخه فعلی نسخه 3248 است و شما می‌خواهید نسخه کاری خود را به حـــالت نسخـــه 1544 در بیاورید، تنـها کافی است که بصورت زیر عمل کنید:


$ svn update -r 1544


بــه همین راحتی شما می‌توانید در تــونـل زمــان به عقب حرکت کنید! ممــکن است بگویید من شماره revision ای که می‌خواهم به آن منتقل شوم را نمی‌دانم، ولی می‌دانم به چه تاریخی از گــذشتـه می‌خواهــم منتــقل شوم، خوب، این هم کار ساده ایست:


$ svn update -r {2000-09-30}


با اینکار خود subversion شماره revision درسـت مربوط به آن تاریخ را پیدا کرده و شما را به آن تاریخ منتقل می‌کند. این سوئیچ در دستورات دیگری همچون svn diff و svn checkout هم کاربــرد دارد. بــله، شما حتی می‌تــوانید دو نســخــه مختلف یک فایل که مثلا یکی مربوط به ۲ ماه پیش و دیگری مربوط به ۱۰ سال پیش است را به اینصورت مقایسه کنید:


$ svn diff -r 2043:22 someOtherFile.php


با این دستور من دارم فایل someOtherFile.php موجود در نسخه ۲۲ را با هــمان فــایـل موجود در نسخه ۲۰۴۳ مقایسه می‌کنم، واقعا subversion دوست داشتنی نیست؟ بدون subversion چطور می‌شود کار کرد؟

به هنگام ساخت نسخه کاری خود بوسیله svn checkout نیز می‌توانید از این ســوئیچ بـرای مشخص کردن نسخه کاری مورد نیاز خود استفاده کنید. تا بحال که استفاده نمی‌کردیم بصورت پیش فرض آخرین نســخه مـوجــود در مخـزن فایل در نظر گرفته می‌شد، ولی از الان می‌توانید نسخه کاری مثلا مربوط به چند ماه پیش را نیز مشخص کنید، حتی می‌توانید مثل مثال بالا تاریخی که دوست دارید نسخه کاری شما مربوط به آن باشد را نیز دریافت کنید.


سوئیچ u در svn status

قبلا گفتیم که به هنگام اجرای svn status، این دستور تنـها تغییرات شما را نسبت به آن نسخه اولیه (نسخه BASE) که ابتدا گرفته‌اید سنجیده و نتیجه را به شما می‌گوید. ما حتــی تــاکیـد کــردیم که این دستور به هیچ عنوان کاری به مخزن فایل اصلی موجود در سِرور نداشته و شما می‌توانید آنرا بدون اتصال به ســرور اصلی (مثلا اتصال به اینترنت اگر سرور در شبکه محلی وجود ندارد) اجـرا نمایید. خوب، با استفاده از سوئیچ u این قضیه فرق می‌کند. خیلی خوب می‌شد اگر قبل از اینکه عمل update و یا commit را انجــام دهیـم بفهمیم چه تغییراتی در سِرور انجام شده است و آیا عمل update ما باعث ایجاد conflict میشود و یا خیر. خب، این سوئیچ دقیقا برای همین منظور ساخته شده است:


$ svn status -u
* 10 someGraphic.png
* 10 someOtherFile.php
* index.php


کاری که من کردم این بود که ابتدا با اجرای دستور svn update -r 10 ، نسخه کاری خود را به ۲ نسخه گذشته کاهش دادم، بدین صورت فایلهای someGraphic.png و someOtherFile.php و index.php پاک شدند. حال که با این سوئیچ کار می‌کنم، می‌بینم که این فایلها جدیدا در مخزن فایل اصلی اضافه شده‌اند و من در صــورت اجرای svn update، این فایلها را دریافت خواهم کرد. علامت * به معنای این است که این فایلها در ســرور تغیــیر یـافــتـه‌اند و چون من آنها را در نسخه کاری خود ندارم، در واقع آنها را دریافت خواهم کرد. ولی اگر نتیجه خروجی به شکل زیر بود داستان فرق می‌کرد.

$ svn status -u
* 10 someGraphic.png
M * 10 someOtherFile.php
* index.php


تنــها فــرق ایـن مثــال بـا مثال قبلی این است که برای فایل someOtherFile.php یک علامت M اضافه شــده است. کلا می‌توان خروجی svn status را در ۵ ستون مشخص کرد، که ستون سوم (همانی که * در آن چاپ می‌شود) مختص به سِرور بوده و ستون اول و دوم مربوط به نسخه کاری ما ‌می‌باشد). ایــن علامت M در اینجا طبق گذشته بدین معناست که ما فایل someOtherFile.php را تغییر داده‌ایم. آن عـلامت * هم همانطور که گفته شد بیان می‌کند که این فایل در مخزن فایل اصلی هم تغییر یافته است! آیا این دو شــرط بــرای شــما آشــنا نیست؟ بله، در صــورتی که بخواهیم svn update را اجرا کنیم به مشکل conflict بر می‌خوریم! چون هم فایل ما نسبت به نسخه BASE تغیــیر یــافـته و هم اینکه فایل در سرور تغییر یافته است. می‌بینید که بدین وسیله می‌توان جلوی تصادم را قبل از ایجاد آن گرفت.


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

به جای تایپ svn status می‌توانید از مخفف آن یعنی svn st استفاده کنید. بجای commit می‌توان از ci استفاده کرد و ... بــرای دیدن لیست کاملی از ایــن مخففات می‌تــوان از svn help COMMAND_NAME استفــاده کــرد، مثلا برای دیدن عبارت مخففی که میتوان بجای svn delete نوشت، می‌نویسیم:


$ svn help delete
delete (del, remove, rm): Remove files and directories from version control.
usage: 1. delete PATH...
2. delete URL...
.
.




بیژن هومند

[1] http://subversion.tigris.org

PDF Version

تمامی مطالب و مقالات این سایت تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد.