تسلیم می‌شویم

در یکی از مجموعه‌ها خیلی اصرار کردم که به جای TFS از SVN استفاده شود. اما نتوانستم حرفم را به کرسی بنشانم. الان در آن مجموعه تقریباً از همه امکانات سورس کنترلی TFS استفاده شده و به غیر از دو سه ماه اول که دوستان خطاهای Runtime برنامه‌شان را هم به گردن TFS می‌انداختند مشکل خاصی وجود ندارد.

در مجموعه دیگری بدون آن که خیلی اصرار کنم موفق شدم به جای TFS یا هر سورس کنترل دیگری از git استفاده کنم. اما حالا سخت پشیمانم و نادم. چون بر و بچ محترم حال ندارند چند تا نکته ساده را هم رعایت کنند. به فکر آقایان و خانم‌ها خطور نمی‌کند که:

۱- قبل از صدور دستور commit، فایل‌های تغییر یافته‌شان را save کنند،

۲- حذف و اضافه فایل به پروژه در ویژوال استودیو نیاز به Save all یا اقلاً یک Rebuild Solution دارد،

۳- اگر دو نفر یک جای یکسان از یک فایل واحد را تغییر دهند، merge conflictی به وجود می‌آید که خود git نمی‌تواند آن را به طور خودکار resolve (حل) کند. و این از منطق کار تیمی و منطق فکری نشات می‌گیرد و جز نقایص git یا هر سورس کنترل دیگری نیست،

۴- ساختار پروژه در ویژوال استودیو خودش در یک فایل خاص با پسوند csproj نگهداری می‌شود پس به وجود آمدن merge conflict در آنجا هم امکان‌پذیر است،

۵- برای پیشگیری از merge conflict اول هر روز کاری یا حتی دو سه بار در روز، قبل از شروع کار باید اول تغییرات دیگران را دریافت کرد،

۶- نگهداری فایل یک کلاس یا winform با بیش از ۱۵۰۰ خط کار درستی در یک محیط تیمی و تحت سورس کنترل نیست،

۷- …

تنها فرق حالت اول و دوم این است در که در حالت اول خود ویژوال استودیو همه کارها را انجام می‌دهد. مثلاً قبلاً از check-in شما را مجبور می‌کند که همه فایل‌ها را save کنید. بنابراین کسی مجبور نیست از معدن گچش استفاده کرده و حواسش به save فایل‌ها قبل از ارسال به سرور باشد.

این است که دست‌هایمان را به نشانه تسلیم بالا برده و اجازه می‌دهیم دوستان به جای استفاده از git، سورس مشترکشان را روزی ده بار از طریق usb flash با هم به اشتراک بگذارند و خودشان نقش سورس کنترل را بازی کنند.

البته این بازی یک درس هم برای من داشت. آن هم این که اگر افراد به طور داوطلبانه از سورس کنترل git یا حتی svn استفاده کردند معنی‌اش آن است که آنها افراد دقیق و قابل اعتمادی هستند.

.
.
.
.

باشد که روزی به راه راست هدایت شویم.

‫تبدیل سورس‌های svn به git

یک بار وقتی که می‌خواستم سورس‌های موجود در Source Safe را به یک سورس کنترل Subversion منتقل کنم متوجه شدم که کار خیلی سختی است. به این علت که ابزارهای خیلی کمی برای این کار وجود داشت. علاوه بر اینها به نظر می‌رسید history فایل‌ها را نمی‌توان به svn منتقل کرد. هیچ کس هم این کار را توصیه نمی‌کرد. این تبدیل از نظر آنها به درد نخور بوده و توصیه می‌شد که آخرین نسخه سورس Source Safe به صورت یک نسخه کاملاً fresh و بدون هیچ history به svn منتقل شود. من هم در آن زمان مجبور شدم همین کار را بکنم.

اما حالا یک بار دیگر می‌خواهم سورسی را از یک Source Control به یک Source Control دیگر منتقل کنم اما این بار با history. خوشبختانه چون می‌خواهم این بار سورس کد را از svn به git منتقل کنم مشکل چندانی ندارم. این کار چندان سخت نیست. کافی است با کمی جستجو به یک راهنمای خلاصه برسید و مراحل را دنبال کنید. من با کمک این راهنمای چند خطی توانستم سورس یک پروژه موجود در Codeplex را از svn به git منتقل کنم. البته دقت به چند نکته می‌تواند عملیات انتقال را راحت‌تر کند:

۱- باید به جای دستور git-svn از دستور git با سویچ svn استفاده کنید. یعنی به صورت git svn.

۲- git svn با urlهای فایلی مثل file:///d:/repo خیلی مشکل دارد. سعی کنید از urlی مثل svn://myserver استفاده کنید. درست کردن یک سرور با استفاده از svn کار چندان سختی نیست. به این راهنما مراجعه کنید.

۳- حواستان به این موضوع باشد که ساختار branch در svn تفاوت زیادی با git دارد. یعنی اگر می‌خواهید branchها را هم از svn به git منتقل کنید باید کمی documentationهای git را بالا و پایین کنید.

۴- بهتر است قبل از شروع سری به راهنمای git مخصوص svn کارها بیندازید.

۵- من همه این کارها را با کمک Git Extensions انجام دادم.