Good days with Subversion

Despite debate of these days which argue that Subversion‘s gold days has been gone and it must be replaced with a distributed SCM like Git, we recently get rid of SourceSafe and migrated to Subversion happily. Before continuing I must emphasis that we were not the only company that uses SourceSafe. There are yet many other companies in Iran that are using SourceSafe. Even there are many other companies and development teams that are not using any SCM at all.

In my opinion our delay of migrating to an up-to-date SCM just like Subversion, Git or TFS was lack of knowledge about new technologies and tools and fear of change. Fortunately in last 2 month I managed to convince my boss to replace SourceSafe with Subversion by showing him that Subversion could be integrated with Visual Studio too by utilizing AnkhSVN. He went happy with hooks that can send emails and with easy branching provided by Subversion. At last he was satisfied when realized that Subversion has a minimum hardware requirement in comparison with TFS. TFS was an old Subversion competitor in our company when we were planning to find a better replacement for SourceSafe.

It is second week that we turned SourceSafe into read-only mode, moved all needed sources to Subversion and updated all process to use Subversion. And fortunately this was a happy migration, nothing went bad, we got no trouble and our client machines and developers complained of nothing. Our style of utilizing Subversion included using 3 excellent tools: Slik Subversion 1.6.9, TortoiseSVN 1.6.7.18415 and AnkhSvn 2.1.7819.411.

Installing Subversion

Congratulations to myself! Finally beat SourceSafe and installed Subversion instead of it. There was a long time that we thought it’s the end of SourceSafe specially when using it offline but we needed confirmation of boss. Nowruz holidays was a good time for a thorough reading of Subversion. Just days after end of holidays, we migrated from SourceSafe to Subversion.
Installing Subversion was not as hard as I thought. In server I just installed slik subversion and followed a very concise guideline in CODING HORROR. After then each client installed TortoiseSVN and AnkhSVN and desired SourceSafe sources imported to Subversion. The only problem that we saw was an incompatibility between Subversion itself and its clients, AnkhSVN and TortoiseSVN. I was using latest version (at the time) of TortoiseSVN and AnkhSVN with an relative old version of Subversion. This caused AnkhSVN error message that was saying you should downgrade something. To get rid of this error I uninstalled everything, downloaded all latest versions (Slik Subversion 1.6.9, TortoiseSVN 1.6.7.18415 and AnkhSvn 2.1.7819.411) and installed them again.

‫دلایل برتری SVN بر SourceSafe

همه می‌دانند که دوران SourceSafe خیلی وقت است به سر آمده و به جای آن باید جایگزین بهتری مثل SVN یا git پیدا کرد. اما با وجود آن هنوز هم باید برای برای از رده خارج کردن SourceSafe از بعضی جاها، دلایل واضح و گویایی پیدا کرد. از آنجا که من هم در حال براندازی SourceSafe از اینجا و جایگزینی آن با SVN هستم تصمیم گرفتن بعضی مزایای این دو را نسبت به هم بسنجم. البته این متن یک مقایسه کلی بدون عمیق شدن زیاد به خصوص در SVN است. اما به هر حال می‌کنم همین مقایسه سرسری هم بتواند فاتحه SourceSafe را بخواند. من برای تهیه این مقایسه از کتابچه Subversion وحید نصیری استفاده کرده‌ام.

امکانات SVN که یا در SourceSafe وجود ندارند یا استفاده از آنها سخت و پردردسر است:

۱- منابع یادگیری و آموزشی در مورد SVN خیلی بیشتر از SourceSafe است.
۲- سرعت کار با SVN بیشتر است.
۳- مکانیزم patch در SVN در تیم‌های پراکنده خیلی به درد بخور است در حالی که SourceSafe اصلاً چنین امکانی ندارد.
۴- انشعابات و تگ‌گذاری در SVN خیلی راحت‌تر و رایج‌تر است.
۵- SVN دارای ابزاری به نام hooks است که در اتوماسیون پروسه تولید نرم‌افزار خیلی مفید و به درد بخور است.
۶- با SVN خیلی راحت‌تر می‌توان سرورهای کنترل سورس ایجاد کرده و به اینترنت متصل کرد.
۷- با SVN خیلی راحت‌تر می‌توان Continuous Integration را (با کمک ابزارهایی مثل CruiseControl) پیاده‌سازی کرد.
۸- بلد بودن SVN در بازار کار با ارزش‌تر از بلد بودن SourceSafe است.
۹- SVN بر خلاف SourceSafe علاوه بر ویندوز در سیستم عامل‌های دیگر هم قابل استفاده است.

۱۰- SVN قابلیت integrate شدن با خیلی ابزارهای دیگر مثل Apache را دارد ولی SourceSafe ندارد.

۱۱- SVN کدباز است و استفاده از آن هم مجانی و بدون دردسر crack است و هم اخلاقی.
۱۲- SVN با کمک TortoiseSVN با ویندوز integrate می‌شود در نتیجه کار با آن SVN در خارج از Visual Studio هم خیلی راحت است.

امکانات SourceSafe که یا در SVN وجود ندارند یا استفاده از آنها سخت و پردردسر است:

۱- به نظر می‌رسد (خودم هنوز امتحان نکرده‌ام) که integration ابزار SourceSafe با Visual Studio راحتی و امکانات بیشتری نسبت به برنامه‌های integration ابزار SVN (مثل ابزار کدباز AnkhSVN و ابزار تجاری VisualSVN) به دست بدهد.

نکات تکمیلی:
در ادامه موضوع این نوشته، به پیوندهای زیر هم نگاهی بیندازید:

‫انتخاب بین SVN و git

مدت‌هاست که به دنبال خلاصی از دست SourceSafe هستیم ولی چون رییس نمی‌خواهد، نمی‌شود که نمی‌شود. رییس آنقدر به SourceSafe علاقه دارد که من خودم هم بعضی وقت‌ها یادم می‌رود چرا می‌خواهم آن را کنار بگذارم. برای جایگزینی SourceSafe دو گزینه را نامزد کرده‌ام: SVN و git. ولی متاسفانه انتخاب بین این دو برایم آنقدر سخت شده که بی‌حساب.

git در این دو سه ساله محبوبیت خیلی خیلی زیادی پیدا کرده است و روز به روز در حال پیشی گرفتن از SVN بوده است. git امکانات خیلی خوبی برای تیم‌های decentralize دارد. به عنوان مثال وقتی که سرور خاموش است یا به اینترنت دسترسی ندارید باز هم می‌تواند از نسخه local خود به عنوان یک سورس کنترل استفاده کنید و بعداً که به سرور دسترسی پیدا کردید آن check-inهای local را به راحتی در سرور اصلی check-in کنید.

هم git و هم SVN محبوبیت خوبی در پروژه‌های کدباز دارند ولی حدس می‌زنم جا افتادن git در شرکت‌های ایرانی خیلی طول بکشد. چون با وجود add-inهایی که برای Visual Studio دارد (مثل Git Extension) باز هم مهمترین ابزار کار با آن git bash است که یک ابزار خط فرمانی است. از دیگر سو SVN در حال حاضر توسط تعدادی از برنامه‌نویسان ایرانی و قاعدتا شرکت‌های ایرانی مورد استفاده قرار می‌گیرد. add-inهای معروف‌تری مثل AnkhSVN دارد و رابط معروفی مثل TortoiseSVN دارد.

اگر از git استفاده کنم به طور حتم باید قید جا افتادن آن در شرکت خودمان را هم بزنم، چون ظاهر خط فرمانی و ریشه تمام لینوکسی آن هر کسی را وحشت‌زده می‌کند و اگر از SVN استفاده کنم می‌ترسم که بیخودی خودم را از قافله فناوری عقب انداخته باشم.  خصوصاً این که برای خودم احتمال کار روی پروژه‌ها به صورت decenteralize بیشتر است.

توجه: StackOverflow پر است از بحث‌های مقایسه git و SVN.

به روز رسانی: برای مقایسه این دو از دید یک برنامه‌نویس ایرانی، نگاهی هم به اینجا بیندازید.

In praise of Source Control Software

We are a small semi-distributed development team. Our team use MS Visual Source Safe 2005 on an internal server at company. One of colleagues sends her patches via email to me and I’m forced to check-in her changes. This manual operation is very tedious and time waster. Everyone knows that there is better source control softwares that if configured properly, she could compile her patches in a pack and I will check-in them in a very easier manner even if we have not an connected server.

In an ideal situation I wish ourselves:
1. Adoption the need for a better source control software like SVN or git by BOSS.
2. Knowledge of using desired source control software among colleagues.
3. A connected-to-internet server for hosting source control software