آشنایی با Subversion بخش هشتم(1063 مجموع کلمات موجود در متن) (7739 بار مطالعه شده است) آشنایی
با Subversion
بخش
هشتم
حالتهای
مختلف استفاده از چندین دستور مهم
به
این دلیل که تا بحــال سعی کردم بــه
راحتترین شکل ممکن subversion
را
توضیح دهم تا بتوانید در اسرع وقت این
نرمافزار و مخزن فایل خود را نصب کرده
و کار خود را شروع کنید، در خیلی از موارد
سوئیچها و حالتهای مختلف استفاده از یک
دستور را بیان نکردم.
در
این قسمت هــدف من این اسـت کــه گوشهای
از این مــوارد را کــه خیلی مهم هستند و
میتوان گفت بدون آنها کار برایتان بسیار
سخت میشود را بیاورم، در عین حــال که
ندانستن این حالات برای کاربری که ادعای
کار با subversion
را
دارد میتوان گفت تا حد زیادی مسخره است!
سوئیچ
r
این
سوئیچ در واقع شماره revision
را
مشخص میکند.
حتما
خــاطرتان هست که گفتیم با هر بار commit
بر
روی مخزن فایل، یک عدد به شماره قبلی
افزوده میشود و شما در هر بار تماس با
مخزن فایل در واقع دارید با آخرین شماره
و در واقع جدیدترین نسخه کار میکنید.
خوب،
حال فرض کنید مثلا بخواهید نسخه کاری خود
را به حالت ۵ سال پیــش برگـــردانید.
بله،
خیـلی اتفاق میافتد که مثلا به عنوان
برنامهنویس بخواهید از توابع موجود در
نسخــه کــاری ۵ سال پیش استفاده کنید،
توابعی که به هر دلیلی دیگر امروز وجود
ندارند و از پروژه شما حذف شدهاند.
اگر
شماره نسخه ای که مایل به کار با آن هستید
را میدانید، مثلا نسخه فعلی نسخه 3248
است
و شما میخواهید نسخه کاری خود را به
حـــالت نسخـــه 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
|