در قسمت قبل به بررسی سیستم کنترل نسخه (Version Control System) یا به اختصار VCS پرداختیم و گفتیم که چرا به آن نیاز داریم. تا به امروز تعداد زیادی VCS به وجود آمده اند که هر کدام مزایا و معایب خود را دارند. ولی اکثر آنها را می توان در سه دسته بندی: محلی (local) ، متمرکز (centralized) و توزیع شده (distributed) جای داد. در ادامه به بررسی هر کدام از این سه دسته بندی خواهیم پرداخت.
سیستم کنترل نسخه محلی (Local Version Control System)
شاید تا الان برای کنترل نسخه های متفاوت از یک فایل، آن را در یک دایرکتوری بکاپ گرفته باشید. شاید با کمی خلاقیت به آن دایرکتوری برچسب زمان هم زده باشید تا بتوانید روی نسخه های مختلف کنترل بهتری داشته باشید. این روش برای خیلی از افراد بسیار مرسوم است. چون مدیریت و انجام آن بسیار راحت است ولی امکان خطا نیز در آن بسیار بالاست. فرض کنید فایلی را در دایرکتوری اشتباها کپی یا حتی باز نویسی کنید!
از گذشته های دور، برنامه نویسان برای حل این مشکل، اولین نسخه های VCS محلی را ایجاد کردند. این سیستم های کنترل نسخه، تغییرات یک یا چند فایل را در پایگاه داده ای در همان سیستم ذخیره می کردند. چون محل ذخیره سازی در همان سیستم است، به این نوع ورژن کنترل ها، ورژن کنترل محلی می گوییم. احتمالا حدس زده باشید که اگر برای این سیستم مشکلی رخ دهد، ممکن است فایل ها و تغییرات همگی از دست بروند. همچنین با چنین رویکردی امکان کار تیمی بر روی فایلها وجود ندارد.
سیستم کنترل نسخه متمرکز (Centralized Version Control System)
برای حل مشکل کار تیمی بر روی فایلها، سیستم های کنترل نسخه متمرکز بوجود آمدند. در این نوع سیستم ها، تغییرات در یک سرور مرکزی ذخیره می شود. هر یک از کاربران برای مشاهده یا تغییر در فایل ها باید اتصال خود را (برای مثال از طریق شبکه یا اینترنت) به این سرور برقرار نماید.
حتما تا الان حدس زده اید که اگر برای این سرور مشکلی پیش بیاید یا دسترسی به سرور قطع شود، امکان استفاده از خدمات VCS هم وجود ندارد. با این حال، این نوع از سیستم ها، سال ها به عنوان استانداردی برای VCS شناخته می شدند.
توجه داشته باشید که در ورژن کنترل های متمرکز، فایلها در سیستم های کاربران قرار دارد و تنها پایگاه داده تغییرات بر روی سرور قرار میگیرد.
یکی از مشکلات اصلی این نوع سیستم ها این است که اگر یکی از کاربران در حال استفاده از یک فایل باشد، سایر کاربران نمی توانند روی آن فایل کار کنند.
برای حل این مشکلات نوعی از VCS به نام Concurrent Version System ساخته شد که میتواند تغییرات چندین فایل را کنترل کند و همچنین چندین کاربر می توانند روی یک فایل کار کنند.
سیستم کنترل نسخه توزیع شده (distributed Version Control System)
ورژن کنترل های توزیع شده، تا حدودی شبیه به VCS های متمرکز هستند، با این تفاوت بزرگ که: یک سرور متمرکز که تمامی تغییرات (یا تاریخچه) را نگهداری کند وجود ندارد. هر یک از کاربران (کلاینت ها) یک کپی از مخزن یا repository را در اختیار دارند. مخزن یا ریپوزیتوری شامل فایلها و تاریخچه تغییرات آن هاست که در قسمت های بعدی این سری مقالات بیشتر با آن آشنا خواهید شد. بنابراین اگر برای سرور مشکلی رخ دهد، هر یک از کاربران می توانند از نسخه ای که در اختیار دارند به عنوان پشتیبان استفاده کنند و سرور را به حالت قبل بر گردانند.
یک قابلیت جذاب که در این نوع از سیستم های کنترل نسخه وجود دارد، fork کردن است. شما میتوانید روی یک مخزن تغییراتی ایجاد نمایید و نسخه متفاوت از نسخه اصلی برنامه داشته باشید. مزیت این عمل این است که می توانید تغییرات مناسبی که سایر افراد اعمال می کنند را به نسخه خود نیز منتقل کنید.
فرض کنید یک پروژه متن باز وجود دارد. معمولا توسعه دهنده اصلی اجازه نمی دهد سایرین تغییراتی در نسخه اصلی اعمال کنند. با fork کردن می توانیم یک کپی از نسخه اصلی در اختیار داشته باشیم و تغییرات دلخواه را روی آن اعمال کنیم. سپس می توانیم با pull request کردن، تغییرات خود را به توسعه دهنده اصلی اطلاع دهیم. او تصمیم خواهد گرفت که تغییرات در نسخه اصلی نرم افزار اعمال شوند یا خیر.
بسیاری از پروژه های متن باز به همین شکل توسعه یافته اند.
تا اینجا با انواع ورژن کنترل ها آشنا شدیم. در قسمت آینده با ورژن کنترل محبوب Git آشنا خواهیم شد و تاریخچه مختصری از آن را برای شما روایت خواهیم کرد.