سیستم ورژن کنترل (Version Control System) که به اختصار VCS نامیده میشود ، سیستمی است که به توسعه دهندگان اجازه میدهد، تغییرات در فایل های خود را ثبت و در موقع نیاز به ورژن مورد نیاز بازگردانند. همچنین با استفاده از این سیستم می توان، به صورت گروهی پروژه ها را توسعه داد. به طور خلاصه اهداف سیستم ورژن کنترل موارد زیر می باشند:
- بازگردنی کدها به ورژن دلخواه
- حفظ ورژنهای مختلف از نرم افزار
- مقایسه ی کدها در ورژن های مختلف
- کار به صورت گروهی بر روی یک پروژه
برنامه نویسی یکی از حوزه هایی است که در آن کار گروهی به معنای واقعی کلمه نمود عینی دارد. به عبارت دیگر، برخی از پروژه های عظیم برنامه نویسی آنقدر گسترده هستند که یک برنامه نویس هرگز به تنهایی از عهده ی آن برنخواهد آمد. پس در چنین شرایطی نیاز است تا دو یا بیش از دو برنامه نویس روی پروژه ای واحد شروع به کار کنند.
در شرایط عادی، برنامه نویسان میتوانند در یک شبکه ی داخلی، فولدری مثلاً تحت عنوان Project را اصطلاحاً Share کرده یا «به اشتراک گذاشته» و هر کسی بخشی از کار را دست گرفته و شروع به کدزنی کنند و همین جا است که مشکل شروع می شود!
فرض کنیم که یکی از اعضای تیم علی نام دارد و دیگری محمد. علی در حال کار کردن روی فایلی است تحت عنوان مثلاً cart-check-out.php که در چنین شرایطی می بایست به محمد بگوید که یک بار شروع به کار کردن روی این فایل نکند چرا که در این صورت، تغییراتی که علی دارد روی فایل میدهد ممکن است از دست بروند.
حال فرض کنیم به غیر از علی و محمد، چندین توسعهدهنده ی دیگر هم به تیم اضافه میشوند و اینجا است که عمق فاجعه هم دوچندان شده و امکان بروز خطا چندین برابر خواهد شد. در اینجا است که وجود یک نرمافزار ورژن کنترل شدیداً احساس می گردد. در چنین نرم افزاری، هر یک از اعضای تیم این امکان را خواهد داشت تا با فراغ بال در هر کجا و هر زمانی شروع به کار روی هر فایلی از پروژه که خواست بکند چرا که در نهایت، نرمافزار ورژن کنترل این امکان را به ما خواهد داد تا کلیه ی تغییرات را اصطلاحاً Merge یا «ادغام» کرده و کلیه ی توسعه دهندگان از تمامی تغییرات برخوردار خواهند شد.
علاوه بر این، در شرایطی که تیم های توسعه ی نرمافزار از ورژن کنترل استفاده نکنند، به دشواری خواهند توانست اقدام به Backup (بکاپ یا نسخه ی پشتیبان) گیری نرمافزار خود کنند. مهمترین مسأله در اینجا، نامگذاری نسخه ها است تا در آینده بر آن اساس بتوان یک نسخه ی خاص را یافت. اگر فرض را هم بر این بگذاریم که بتوانیم به نسخه ی بکاپ مد نظر خود دست پیدا کنیم، حال چگونه می بایست متوجه شویم که در این نسخه ی مد نظر چه بخشهایی دستخوش تغییر شده اند.
تمامی نقاط ضعف فوق الذکر، ما را مجاب خواهد کرد که به سمت ورژن کنترل مهاجرت کنیم. در سیستمهای ورژن کنترل، پروژه ی ما صرفاً یک نسخه بیشتر نخواهد داشت که نسخه ی نهایی است و سایر نسخه ها نیز به عنوان بکاپ در نظر گرفته خواهند شد که به سادگی قابل دسترسی هستند.
هر زمانی که ما تغییری در پروژه ایجاد میکنیم و قصد داریم پروژه ی خود را در سیستم ورژن کنترل آپلود کنیم، نرمافزار از ما میخواهد که حتماً توصیف کوتاهی از تغییراتی که در پروژه دادهاید ذکر کنید. حال فرض کنیم در پروژه ی خود تغییراتی دادهایم اما بعداً کاشف به عمل میآید که تغییرات اخیر اصلاً اثربخش نبودهاند و نیاز داریم تا نرمافزار را به نسخه ی مثلاً یک هفته قبل برگردانیم. با استفاده از سیستمهای ورژن کنترل، این کار به سادگی و با نوشتن چند دستور ساده امکانپذیر خواهد بود.