در این مقاله با دو سیستم
کنترل نسخه
git و
SVN آشنا شده و تفاوتهای آنها را برای تازهکاران بررسی میکنیم. ایده
اولیه نوشتن این مقاله زمانی بود که برای یک پروژهای، اعضای تیم ما دور هم
جمع شده و در مورد ابزارهای مورد استفاده بحث کردند و یک عده از گیت و
عدهای از SVN صحبت میکردند. بر این شدم که مقالهای نوشته و ابتدا به
معرفی آنها و سپس به مزایا و معایب هر کدام بپردازیم.
امروزه، استفاده از سیستمهای کنترل نسخه ( Version Control System
) رواج زیادی پیدا کرده است. این سیستمها به شما اجازه میدهند تا
تغییراتی را که در پروژه ایجاد میشوند، ضبط و ثبت کرده تا از تغییراتی که در
سطح پروژه اتفاق میافتد آگاه شوید. با ذکر یک نمونه این تعریف را باز
میکنم:
شما
به صورت تیمی در حال انجام یک پروژه هستید و باید نسبت به تغییراتی که
اعضای تیم در یک پروژه میدهند، آگاه شوید. هر برنامه نویس بعد از انجام
تغییرات باید این تغییرات را در سیستم کنترل نسخه به روز کند تا بتوان به
سوالات زیر پاسخ داد:
آیا اگر در
بین راه به مشکل برخوردید میتوانید پروژه خود را به یک یا چند گام عقبتر
برگردانید؟ آیا میتوانید به هر یک از اعضاء تیم دسترسیهایی را به قسمت
هایی از پروژه تعیین کنید؟ میتوانید تفاوت فایلهای تغییر یافته را
بیابید؟ آیا میتوان خطاهای یک برنامه را گزارش داد و به بحث در مورد آن پرداخت؟
چه کسی کدها را تغییر داده است؟ روند کار و تغییرات به چه صورت است؟ (این
مورد برای به روز کردن نمودارهای
burndown در
توسعه چابک میتواند بسیار مفید باشد.)
پی
نوشت: نه تنها در یک تیم بلکه بهتر هست در یک کار انفرادی هم از این
سیستمها استفاده کرد تا حداقل بازبینی روی پروژههای شخصی خود هم داشته
باشیم.
سیستم
کنترل گیت: این سیستم در سال 2005 توسط لینوس توروالدز خالق لینوکس معرفی
شد و از آن زمان تاکنون یکی از پر استفادهترین سیستمهای کنترل نسخه شناخته
شده است. ویکی پدیا گیت را به این شکل تعریف میکند: «یک سیستم بازبینی توزیع شده با تاکید بر جامعیت دادهها، سرعت و پشتیبانی جهت توزیع کار.»
از معروفترین سیستمهای هاستینگ که از گیت استفاده میکنند، میتوان به
گیت هاب اشاره کرد.
اکثر سیستمهای هاستینگ گیت، دو حالت را ارائه میدهند:
عمومی : در
این حالت کدهای شما به عموم بازدیدکنندگان نمایش داده میشود و دیگران هم
میتوانند در تکمیل و ویرایش کدهای شما مشارکت کنند و این امکان به صورت
رایگان فراهم است. سیستم گیت هاب به دلیل محبوبیت زیادی که دارد، در اکثر
اوقات انتخاب اول همه کاربران است.
خصوصی:
در این حالت کد متعلق به شما، یا شرکت یا تیم نرم افزاری شماست و غیر از
افراد تعیین شده، شخص دیگری به کدهای شما دسترسی ندارد. اکثر سیستمهای
مدیریتی این مورد را به صورت premium پشتیبانی میکنند. به این معنا که
باید اجاره آن را به طور ماهانه پرداخت کنید. سیستم گیت هاب ماهی پنج دلار
بابت آن دریافت میکند. سیستم دیگری که در این زمینه محبوبیت دارد سیستم
BitBucket هست
که که اگر تیم شما کوچک است و در نهایت پنج نفر هستید، میتوانید از حالت
خصوصی به طور رایگان استفاده کنید ولی اگر اعضای تیم شما بیشتر شد، باید
هزینهب اجاره آن را که از 10 دلار آغاز میگردد، به طور ماهیانه پرداخت
کنید.
پی نوشت: میتوانید از سیستمهای متن باز رایگان هم که قابل نصب بر روی
هاست ها هم هستند استفاده کنید که در این حالت تنها هزینه هاست یا سرور برای شما میماند.
در سیستم گیت اصطلاحات زیادی وجود دارد:
Repository یا مخزن: برای هر
پروژهای که ایجاد میشود، ابتدا یک مخزن ایجاد شده و کدها داخل آن قرار
میگیرند. کاربرانی که قصد تغییر پروژه را دارند باید یک مخزن جداگانه ایجاد
کنند تا بعدا تمامی تغییرات آنها را روی پروژهی اصلی اعمال کنند.
Fork:
هر کاربری که قصد تغییر را بر روی سورس کدی، داشته باشد، ابتدا باید پروژهی نویسنده اصلی پروژه را به یک مخزنی که متعلق به خودش هست انتقال دهد. به این
عمل Fork کردن میگویند. حال کاربر تغییرات خودش را اعمال کرده و لازم هست
که این تغییرات با پروژهی اصلی که به آن Master میگوییم ادغام شوند. بدین جهت
کاربر فرمان pull request را میدهد تا به نویسندهی اصلی پروژه این موضوع
اطلاع داده شود و نویسندهی اصلی در صورت صلاحدید خود آن را تایید کند.
Branching یا شاخه بندی: نویسندهی مخزن اصلی میتواند با مفهومی با نام شاخه بندی کار کند. او با استفاده از
این مفهوم، پروژه را به قسمت یا شاخههای مختلف تقسیم کرده و همچنین با
ایجاد دسترسیهای مختلف به کاربران اجازه تغییرات را بدهد. به عنوان مثال
بخشهای مختلف پروژه از قبیل بخش منطق برنامه، داده ها، رابط کاربری و ...
میتواند باشد. بعد از انجام تغییرات روی یک شاخه میتوانید درخواست merge
ادغام شدن یا کل پروژه را داشته باشید. در عمل شاخه بندی، هیچ کدام از
شاخههای بر روی یک دیگر تاثیر یا دخالتی ندارند و حتی میتوانید چند شاخه
را جدا از بخش master با یکدیگر ادغام کنید.
به غیر از ارتباط خط فرمانی که میتوان با گیت هاب برقرار کرد، میتوان از یک سری ابزار گرافیکی خارجی هم جهت ایجاد این ارتباط، استفاده کرد:
GitHub For Windows :
نسخهی رسمی است که از طرف خود گیت هاب تهیه گردیده است و استفاده از آن
بسیار راحت است. البته یک مشکل کوچک در دانلود آن وجود دارد که دانلود آن
از طریق یک برنامهی جداگانه صورت گرفته و اصلا سرعت خوبی جهت دانلود ندارد.
Visual Studio .Net : (
+ ) خود
ویژوال استودیو شامل سیستمی به اسم Microsoft Git Provider است که در بخش
تنظیمات میتوانید آن را فعال کنید (به طور پیش فرض فعال است) و به هر نوع
سیستم گیتی میتوانید متصل شوید. تنها لازم است که آدرس Url گیت را وارد
کنید.
SourceTree:
از آن دست برنامههای محبوبی است که استفاده آسانی دارد و خودم به شخصه از
آن استفاده میکنم. شامل دو نسخهی ویندوز و مک است و میتوانید با چندین
سیستم گیت مثل «گیت هاب» و «بیت باکت» که در بالا به آنها اشاره شد، به طور
همزمان کار کند.