ورژن کنترل چیست
در این مقاله میخوام در مورد این که ورژن کنترل چیست و چرا باید از اون استفاده کنیم صحبت کنم. قبل از شروع بحث اگه میخوای برنامه نویسیو شروع کنی، یکی از مهمترین مهارت ها یادگیری ورژن کنترل گیت هست، و خبر خوب اینکه ما در آکادمی استادباش یه دوره جامع آموزش گیت و گیت هاب داریم که در حال برگزاریه و میتونی توی این دوره شرکت کنی و مهارتتو افزایش بدی.
ورژن کنترل چیست؟
ورژن کنترل در واقع یک سیستم نگهداری تغییرات هست که در یک و یا مجموعه ای از فایل ها در طول زمان، این تغییرات رو ثبت می کنه، بنابراین شما بعدا میتونین برگردین به یک ورژن خاص و تغییرات مورد نظرتون رو اعمال کنین.
ورژن کنترل برای چه کسانی استفاده میشود؟
اگر شما یک گرافیک و یا وب دیزانیر هستین و نیاز دارین تا تمام ورژن های عکس ها و یا لایه هاتون رو داشته باشین (که قطعا میخواین) استفاده از ورژن کنترل یا VCS گزینه ای بسیار عاقلانه و منطقیه. ورژن کنترل به شما این امکان رو میده که بتونین فایل های مورد نظرتون رو به حالت و استیت قبلی و یا حتی کل پروژه تون رو به استیت قبلی ببرین، تغییرات هر نسخه رو با هم مقایسه کنین، ببینین آخرین تغیرات توسط چه کسی صورت گرفته که باعث بروز خطا شده و یا چه کسی در چه زمانی مشکلی در سیستم ایجاد کرده و اطلاعات بسیار زیادتری که شما رو در روند مدیریت پروژه یاری می کنه در اختیارتون میذاره. VCSبه شما این امکان رو میده تا بتونین فایل هایی که خراب شده و یا گم شده رو با سربار بسیار بسیار پایین بازیابی کنین.
ورژن کنترلهای لوکالی یا LVCSs
انتخاب اکثر افراد برای داشتن یک سیستم کنترل نسخه محلی به این صورته که فایل هاشون رو در یک دایرکتوری با نشون دادن زمان نگهداری می کنن.این یک روشه بسیار رایج هست چرا که بسیار سادست اما به شدت مستعد تولید خطاست. بارها دیدم دوستانی رو که در حال تکمیل کردن پروپوزال و یا پایان نامه شون بودن و از همین روش سنتی برای مدیریت فایل هاشون استفاده می کردن و خیلی راحت فراموش می کردن که کدوم دایرکتوری اصلی بوده و خیلی تصادفی فایل ها رو اشتباهی ایجاد و یا کپی میکردن.اما برای رفع این مشکل برنامه نویس ها راه حل بسیار جالب و کاربردی رو ارائه دادن.
یکی از محبوب ترین ابزارهای VCS سیستم RCS بود که هنوز هم در خیلی از رایانه ها توزیع می شود.RCS با نگه داشتن مجموعه ای از patch ها در فرمت های خاص روی سیستم کار می کنه و بعد می تونه با ادغام کردن این patch ها در هر نقطه زمان، شکل اصلی فایل رو دوباره ایجاد کنه.
ورژن کنترلهای متمرکز یا CVCSs
مشکل دیگه ای که مردم باهاش روبرو شدن این بود که باید با توسعه دهنده های دیگه روی سیستم های دیگه همکاری می کردن و برای رفع این مشکل هم سیستم های کنترل نسخه متمرکز و یا CVCSs توسعه داده شدن.این سیستم ها (برای مثال میتونم به CVSها ، Subversion و همینطور Perforce اشاره کنم) یه سرور دارن که تمام ورژن های فایل هارو درون خودش نگه می داره و یه سری کلاینت که می تونن این فایل هارو از سرور استخراج می کنن. این روش چندین سال به عنوان یک استاندارد برای سیستم های کنترل نسخه در نظر گرفته شده بود.
مزایا و معایب ورژن کنترل متمرکز
این روش مزایای زیادی در مقایسه با روش قبلی داره. برای مثال: هر کسی، تا حدی میدونه که بقیه روی پروژه چیکار دارن می کنن، ادمین ها، کنترل بسیار دقیقی از این که هر کس چه کاری می تونه انجام بده دارن، اما در مقابل این روش معایبی رو هم داره و واضح ترینش هم اینه که یک سرور پاسخگوی همه ی درخواست هاست و این یعنی ایجاد گلوگاه و single point of failure.
اگر سرور برای مدت فقط یک ساعت از دسترس خارج بشه، هیچ کس نمی تونه روی پروژه کار کنه و یا به طور مثال اگه هارد دیسک دیتابیس سرور خراب بشه و فایل های بک آپ هم قابل بازیابی نباشه، عملا هر آنچه رشتیم پنبه شده.البته که VCS های لوکالی هم از این مشکل رنج می برن.
به طور کلی هر زمان که تاریخچه ی کل پروژه رو فقط در یک مکان داشته باشیم خطر از دست دادن داده ها همیشه در کمین ماست و به همین دلیل هم هست که اکثر شرکت ها همزمان از ورژن کنترل های مختلفی استفاده می کنن. به طور مثال در شرکت ما، پروژ هم بر روی گیت لب شرکت قرار میگیره، هم گیت هاب و هم گیت لوکال سیستم ها.