مهاجرت از Subversion به Bazaar به همراه راهنمای ویژه برای پروژه های Sourceforge

بلاگ

چیزی حدود شش سال از اولین commit ام در Subversion می گذرد و باید اعتراف کنم که جایگزینی CVS با Subversion در آن زمان برایم بسیار لذت بخش بود چرا که دیگر از نواقص و محدودیت های CVS خبری نبود. اما باید قبول کرد که دیگر دوره سیستم های کنترل نسخه متمرکز به پایان رسید و به ابزارهای بسیار قوی تری برای مدیریت کد پروژه های بزرگ احتیاج داریم. امروزه نیاز داریم که بتوانیم با هر شخصی , روی هر چیزی , در هر نقطه ای و در هر زمانی کار کنیم و علاوه بر این ها همه این فعالیت ها را تحت نظر و تحت کنترل داشته باشیم.

به عنوان بخشی از یکی از پروژه های تحقیقاتی ام (Comparing Popular Version Control Systems) تصمیم گرفتم که Bazaar را ارزیابی کنم و برای این منظور یکی از پروژه هایی که در Sourceforge دارم را به Bazaar تبدیل کنم تا هم درک بهتری از نحوه عملکرد Bazaar پیدا کنم و هم ابزارهای مهاجرت آن را بررسی کنم چرا که اگر نتوان تاریخچه کدها را منتقل کرد مشکل بزرگی خواهد بود.

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

نکته مهم دیگر اینکه اگر از ساختار انشعاب توصیه شده Subversion در پروژه استفاده نکرده اید (branches,tags,trunk) پیشنهاد می کنم به این ساختار تبدیل کنید. البته اگر ممکن نباشد بازهم امکان تبدیل به Bazaar وجود دارد ولی نیازمند تغییراتی در کد ابزار تبدیل است که در این مقاله به آن پرداخته نشده است.

چندین روش برای تبدیل Subversion به Bazaar وجود دارد ولی روشی که در این مقاله از آن استفاده شده است ابزار bzr-svn است که در Linux , Windows و پروژهای Sourceforge و غیر Sourceforge کار می کند. برای کسب اطلاعات بیشتر در رابطه با سایر روش ها سری به این صفحه بزنید BzrMigration - Bazaar Version Control

نکته : عبارات USERNAEM و PROJECTNAME را با نام کاربری و نام پروژه مورد نظرتان جایگزین کنید.

 

مهاجرت

مرحله 1 : بدست آوردن دسترسی Shell به Sourceforge

# در صورتی که از Sourceforge استفاده نمی کنید می توانید این مرحله را نادیده بگیرید.

برای dump مخزن Subversion نیاز به دسترسی مستقیم به Subversion داریم. خوشبختانه Sourceforge امکان استفاده از remote shell را برای صاحب پروژه فراهم کرده است. ولی قبل از اینکه بتوانیم از آن استفاده کنیم باید از Sourceforge بخواهیم که یک Shell Session برای ما ایجاد کند :

ssh USERNAME,PROJECTNAME@shell.sourceforge.net create

حالا می توانیم لوگین کنیم :

ssh USERNAME,PROJECTNAME@shell.sourceforge.net

نکته : رمز عبور همان رمز عبور حساب کاربری در Sourceforge است.

برای کسب اطلاعات بیشتر در رابطه با دسترسی Shell در Sourceforge مراجعه کنید به  Shell service – sourceforge

 

مرحله 2 : نسخه کاری (Working Copy)؟!

یکی از نواقص سیستم های کنترل نسخه متمرکز عدم وجود تاریخچه کد محلی می باشد. بنابراین معمولا مقدار قابل توجهی تغییرات Commit نشده در نسخه کاری وجود دارد. چند راه برای تبدیل این تغییرات به همراه مخزن اصلی وجود دارد :‌

  • قبل از مهاجرت همه تغییرات را Commit کنیم!
  • نسخه کاری را صادر کنیم سپس مخزن را تبدیل کنیم , بعد از مخزن جدید Bazaar یک checkout بگیریم ، همه فایل های داخل فولدر Checkout را پاک کرده و نسخه ای که قبلا صادر کرده بودیم را روی آن کپی کنیم (در این روش تاریخچه مربوط به فایل های تغییر نام و تغییر مکان یافته از بین می رود مگر اینکه از افزونه هایی نظیر auto-mv استفاده کنیم که البته نمی دانم تا چه حد قابل اطمینان است)
  • تغییرات را روی یک انشعاب موقت Commit کرده و بعد از تبدیل مخزن ، آن انشعاب را با انشعاب اصلی merge کنیم.
  • یک عدد Patch از نسخه کاری تهیه کرده و بعد از تبدیل ، آن را روی نسخه کاری جدید اعمال کنیم.

 

مرحله ۳ : صدور مخزن Subversion

# در صورتی که از Sourceforge استفاده نمی کنید می توانید این مرحله را نادیده بگیرید.

در Sourceforge مخازن Subversion به صورت پیشفرض مستقیما قابل دسترسی نیستند برای ایجاد این دسترسی ابزاری به نام adminrepo وجود دارد. در Sourceforge هر پروژه می تواند از چندین VCS استفاده کند!

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

adminrepo --checkout svn

بعد از اجرا مخزن Subversion در آدرسی نظیر /svnroot/PROJECTNAME قابل دسترسی می شود.

 

مرحله ۴ : Dump کردن و تهیه نسخه پشتیبان از مخزن Subversion

برای حفظ تاریخچه کدها لازم است که از کل مخزن Dump بگیریم که در واقع کار همان نسخه پشتیبان را نیز انجام می دهد. در این مقاله ما قصد تغییر چیزی در مخزن پروژه را نداریم و اگر به هر دلیلی نیاز به این کار دارید می توانید نگاهی به راهنمای دستورات فرمان adminrepo بیاندازید.

با استفاده از کد زیر که نسخه Dump تهیه کرده و آن را فشرده می کنیم :

svnadmin dump /svnroot/PROJECTNAME/ > svn.dump
zip -r svn.dump.zip svn.dump

مرحله ۵ : بارگذاری Dump

# در صورتی که از Sourceforge استفاده نمی کنید می توانید این مرحله را نادیده بگیرید.

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

mv svn.dump.zip ~/userweb/htdocs/

حالا می توانید برای دریافت فایل از این لینک استفاده کنید :http://USERNAME.users.sourceforge.net/svn.dump.zip

نکته : راه های دیگری نیز مسلما برای این کار وجود دارد (نظیر scp) اما خوب در همه سیستم عامل ها یکسان نیستند. 


مرحله ۶ : فعال نمودن Bazaar برای پروژه

# در صورتی که از Sourceforge استفاده نمی کنید می توانید این مرحله را نادیده بگیرید.

در Sourceforge لوگین کرده و صفحه Deveop را از طریق لینک های موجود باز کنید. سپس به این صفحه مراجعه کنید :

"Project Admin" -> "Feature Settings"

در صفحه Feature Settings روی "Available Features" کلیک کرده و گزینه Bazaar را فعال کنید.

 

مرحله ۷ : آماده کردن مخزن Bazaar در Sourceforge

# در صورتی که از Sourceforge استفاده نمی کنید می توانید این مرحله را نادیده بگیرید.

برای سادگی بیشتر در این مقاله از رویه کاری (work-flow) آشنا برای کاربران Subversion استفاده شده است ولی امکان تبدیل آن به مدل های دیگر به راحتی امکان پذیر است. Bazaar از چندین مدل توسعه مختلف پشتیبانی می کند.

در Sourceforge بر خلاف Subversion دسترسی مستقیم به مخزن Bazaar داریم بنابراین کار را با ساخت یک مخزن جدید ادامه می دهیم.

mkdir -p /home/scm_bzr/p/pr/PROJECTNAME/
cd /home/scm_bzr/p/pr/PROJECTNAME/
bzr init-repo --no-trees .
bzr upgrade --rich-root-pack .

نکته : نام دو فولدر قبل از PROJECTNAME به ترتیب از روی حرف اول و حرف اول و دوم نام پروژه نام گذاری شده اند.

مرحله ۸ : نصب Bazaar

Windows :

http://wiki.bazaar.canonical.com/WindowsDownloads

Linux (Redhat based) :

sudo yum install bzr bzr-svn

Linux (Debian based) :

sudo apt-get install bzr bzr-svn

برای سایر توزیع ها : DistroDownloads - Bazaar Version Control

 

مرحله ۹ : آماده کردن Bazaar در کامپیوتر محلی

همانطور که قبلا نیز ذکر شد برای تبدیل مخزن به ابزاری نیاز داریم که در Sourceforge وجود ندارد و امکان نصب آن نیز نیست. در نتیجه باید این کار را به شکل offline انجام داد.

mkdir -p vcs/bazaar/PROJECTNAME
bzr init-repo vcs/bazaar/PROJECTNAME  #(prepare local repository)

مرحله ۱۰ : تبدیل Dump مخزن Subversion

هر دو مخزن محلی و آنلاین باید rich root باشند تا بتوان با دستور bzr upgrade --rich-root-pack آن را به روز کرد.

unzip svn.dump.zip
#Importing each subversion folder branch as a bazaar branch
bzr svn-import --layout=trunk svn.dump vcs/bazaar/PROJECTNAME

نکته : svn-import چند پارامتر مفید دیگر نیز دارد که می توانید در این صفحه ببینید.

نکته : زمانی که داشتم یکی از پروژه هایم را به Bazaar تبدیل می کردم به مشکلی عجیبی بر خوردم که کلی زمان برد تا علت پیدا شد! علت مشکل تفاوت بین نسخه Bazaar در نسخه آنلاین و محلی بود. برای حل مشکل از این دستور استفاده کردم : bzr upgrade --rich-root-pack

 

مرحله ۱۱ : انتقال branch ها به مخزن آنلاین

# در صورتی که از Sourceforge استفاده نمی کنید می توانید این مرحله را نادیده بگیرید.

برخلاف Subversion انشعاب های Bazaar درختی نیستند بنابراین لازم است که انشعاب ها را تک به تک push کنیم.

cd vcs/bazaar/PROJECTNAME
cd trunk
bzr push bzr+ssh://USERNAME,PROJECTNAME@PROJECTNAME.bzr.sourceforge.net/bzrroot/PROJECTNAME/trunk
cd ..
cd branches/v1.0
bzr push --create-prefix bzr+ssh://USERNAME,PROJECTNAME@PROJECTNAME.bzr.sourceforge.net/bzrroot/PROJECTNAME/branches/v1.0

مرحله ۱۲ : Checkout نسخه کاری

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

مخزن Sourceforge

mkdir -p ~/vcs/bazaar/working_copy
cd ~/vcs/bazaar/working_copy
bzr checkout bzr+ssh://USERNAME@PROJECTNAME.bzr.sourceforge.net/bzrroot/PROJECTNAME/trunk

مخزن محلی

mkdir -p ~/vcs/bazaar/working_copy
cd ~/vcs/bazaar/working_copy
bzr checkout ~/vcs/bazaar/PROJECTNAME/trunk

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

منابع

تا به حال رای داده نشده