در این آموزش قصد داریم تا با سازوکار سیستمهای ورژن کنترل، مزایای استفاده از آنها، انواعشان و همچنین دلایل لزوم استفاده از یک سیستم ورژن کنترل همچون گیت آشنا شویم.
Version Control System یا به اختصار VCS به ابزاری اطلاق میگردد که این امکان را در اختیارمان میگذارد تا دست به مدیریت نسخهبندی یک پروژه بزنیم. به عبارت دیگر، از طریق ویسیاس (سیستم کنترل نسخه) به سادگی قادر خواهیم بود تا نسخههای مختلف از یک پروژهای که غالباً نرمافزاری است را مدیریت نموده، تغییرات را رصد نماییم و در صورت لزوم نسخههای پیشین پروژه را مجدد مورد استفاده قرار دهیم.
اساساً میتوان ویسیاس را همچون یک دیتابیسی تلقی کرد که این وظیفه را دارا است تا نسخههای مختلف و همچنین تغییراتی که در جایجای پروژه انجام میدهیم را در قالب یک سری ورژن (نسخه) ذخیره سازد. به طور مثال، وقتی به یکی از نسخههای پیشین پروژه رجوع میکنیم، دقیقاً میتوانیم به تغییرات صورتگرفته پی برده و آن را با نسخههای جدید مقایسه نماییم (آنچه در ارتباط با سیستمهای کنترل نسخه حائز اهمیت است این که چنین سیستمهایی میتوانند برای هر نوع پروژهای مورد استفاده قرار گیرند؛ از یک وبسایت ساده گرفته تا یک پروژهٔ نرمافزاری اینترپرایز و یا حتی یک کتاب یا پروژهٔ طراحی.)
مزایای استفاده از VCS کدامند؟
اساساً استفاده از یک سیستم ورژن کنترل مزایای بسیاری را برای گروههای کاری به ارمغان میآورد که برخی از مهمترین آنها عبارتند از:
- کار گروهی: بدون استفاده از یک ویسیاس، انجام تیموُرک در یک پروژهٔ نرمافزاری بسیار دشوار شده و همواره این احتمال وجود دارد که اعضای تیم مرتکب خطا گردند. در چنین فضایی، اعضای تیم میباید به یک فولدری که از طریق شبکه روی سیستم تمامی آنها به اشتراک گذاشته شده دسترسی یافته و به طور مثال اگر یکی از اعضاء شروع به کار روی فولدری تحت عنوان first_folder
کرد، حتماً باید سایر اعضای تیم را از این موضوع مطلع ساخته تا ایشان سهواً شروع به کار روی همان فولدر نکنند!
اما با شروعِ استفاده از یک ویسیاس، علاوه بر این که اعضای تیم میتوانند بدون هیچ گونه نگرانی شروع به کار روی پروژهای واحد کنند، ایشان قادر خواهند بود تا روی بخشهای یکسانی از پروژه نیز کار نموده و در نهایت با استفاده از دستورات خاصی تمامی تغییرات صورتگرفته را با یکدیگر ادغام نمایند مضاف بر این که اعضای تیم الزاماً نیازی نخواهند داشت تا نزدیک به یکدیگر باشند، بلکه از سراسر دنیا میتوانند روی پروژهای واحد (همچون کِرنِل لینوکس) کار کنند.
- ذخیرهٔ نسخههای مختلف یک پروژه: یکی از مزایای منحصربهفردی که یک سیستم کنترل نسخه برایمان به ارمغان میآورد آن است که میتوانیم دست به نسخهبندی پروژهٔ خود بزنیم که در غیر این صورت نسخهبندی پروژه در قالب نامهایی همچون sokanacademy-2020-06-23-v1 و sokanacademy-2020-06-23-v2 الی آخر کاری است که بالاخره روزی دردسرساز خواهد شد زیرا در چنین شرایطی پرسش کلیدی آن است که «از کجا معلوم میشود که در هر نسخه چه تغییراتی صورت گرفته است؟» اما این در حالی است که با استفاده از یک ویسیاس به سادگی میتوان کلیهٔ تغییرات در پوشههای مختلف پروژه و حتی تکتک فایلها و آپدیتهایی که روی آنها صورت گرفته را رصد کرد.
همچنین لازم به یادآوری است از آنجا که چنین سیستمهایی توسعهدهنده را موظف میکنند تا در صورت ایجاد یک سری تغییرات، توضیحاتی تکمیلی در ارتباط با نوع تغییرات صورتگرفته درج نمایند، احتمال این که در آینده با مراجعه به نسخههای مختلف نرمافزار دچار سردرگمی شویم به حداقل خواهد رسید و دقیقاً خواهیم دانست که هر نسخه حاوی چه تغییراتی است.
- رجوع به نسخههای پیشین: در صنعت توسعه نرمافزار به کَرات پیش میآید که نیاز پیدا خواهیم کرد تا علیرغم نوشتن کدهای جدید، گاهی نسخههای قبلی نرمافزار را دیپلوی نماییم که در چنین شرایطی سیستمهای ورژن کنترل به سادگی چنین امکانی را در اختیارمان میگذارند.
- بکآپ: یکی دیگر از مزیتهای سیستمهای کنترل نسخهای همچون گیت آن است که نقش یک سیستم بکآپگیری را بازی میکنند به طوری که تکتک اعضای تیم یک نسخهٔ کامل از پروژه را خواهند داشت و در صورتی که مشکلی برای نسخهٔ اختصاصی یکی از اعضاء پیش آید، این تضمین وجود دارد که کماکان در سیستمی دیگر چندین کپی از نسخهٔ اصلی پروژه در دسترس است.
درآمدی بر انواع VCS
به طور کلی، میتوان گفت که سیستمهای کنترل نسخه را میتوان به دو گروه کلی Centralized و Distributed تقسیمبندی کرد با این توضیح که گروه اول به سیستمهایی اطلاق میگردد که تمامی اعضای تیم روی یک به اصطلاح ریپازیتوری (منبع) که در فضای اینترنت در دسترس است کار میکنند که از جملهٔ چنین سیستمهایی میتوان به Subversion اشاره کرد.
در مقابل، Git یک سیستم کنترل نسخهٔ به اصطلاح Distributed است با این توضیح که چنین ابزاری این امکان را در اختیار توسعهدهنده قرار میدهد تا یک نسخهٔ کامل (حاوی تاریخچهای از تغییرات گذشته) از پروژه را از سرور دریافت نموده سپس به صورت لوکال و بدون نیاز به دسترسی به اینترنت خواهد توانست شروع به کار و اِعمال تغییرات روی پروژه نماید سپس هر زمانی که تمایل داشت تا دیگر اعضای تیم نیز به تغییرات صورتگرفته توسط وی دست یابند، میتواند به اینترنت کانکت شده و تغییرات را روی سرور اصلی دیپلوی نماید.
چرا میباید کار با یک VCS را بیاموزیم؟
در صنعت توسعهٔ نرمافزار به طور قطع میتوان گفت که هیچ توسعهدهندهای را نمیتوان یافت که حرفهای باشد اما کار با یک یا چند نوع از سیستمهای ورژن کنترل را بلد نباشد! به عبارت دیگر، تسلط به یکی از این سیستمها در کنار دیگری مهارتهای کدنویسی کلید ورود به شرکتهای نرمافزاری حرفهای است و چنانچه یک کدآموز قصد داشته باشد تا هر چه سریعتر خود را از گروه توسعهدهندگان مبتدی و تازهکار مجزا سازد، میباید کار با یکی از این سیستمها را بیاموزد که در این دورهٔ آموزشی تمرکز روی ابزار Git است.