سیستم کنترل نسخه (version control system)
سیستم های کنترل نسخه یا به اختصار vcsها در بیشتر موارد خود برنامه ای کامل و مستقل هستند که در مدیریت تغییرات اسناد، برنامه ها، عکس ها یا هر فایلی در کامپیوتر به ما کمک می کنند. تغییرات معمولا با کدی از حروف یا اعداد نشانه گذاری شده که به آن revision number یا revision گفته می شود.
ساده ترین استفاده از vcs ها زمانیست که بر روی فایل خود تغییراتی به اشتباه انجام داده اید و می توانید فایل خود را به نسخه های قبل بازگردانده و دوباره کار را بر روی فایل شروع کنید. به وسیله ی vcs ها اگر چند نفر یک فایل را ویرایش می کنند، می توان مسیر تغییرات را پیگیری کرد و هر نفر از ویرایش های دیگران آگاه شود، این امکان به افراد اجازه می دهد تا اشتباه های یکدیگر را تصحیح کنند و حتی در محیط هایی مانند ویکی پدیا از خرابکاری جلوگیری کنند.
هر تغییر می تواند در اندازه ی اصلاح یک غلط املایی در فایل متنی تا refactoring (هر چقدر فکر کردم معادل فارسی برای این کلمه پیدا کنم، چیزی به ذهنم نرسید) یک پروژه که بر روی صدها فایل تاثیر بگذارد، باشد. با هر تغییر در vcs، اطلاعاتی مانند زمان تغییر، نام تغییر دهنده، متن کوتاهی برای توضیح و … ذخیره می شود.
سیستم های کنترل نسخه دارای دو نوع متمرکز مانند SVN و توزیع شده مانند Git هستند که تفاوت آن ها در نحوه ی ذخیره اطلاعات می باشد و همین قضیه باعث معایب و مزایای آنها نسبت به یکدیگر می شود. برای مثال در نوع متمرکز تمام اطلاعات بر روی یک سرور ذخیره شده و همه افراد برای ثبت هرگونه تغییر در فایل ها باید به سرور متصل باشند و اگر سرور در دسترس نباشد نمی توان تغییری را ثبت کرد. اما در مدل توزیع شده هر نفر دیتابیس کاملی از همه ی اطلاعات را در اختیار دارد و هر زمان که کار ویرایشش با فایل تمام شد، آن را با سرور همگان سازی می کند. این قابلیت کمک می کند اگر سرور هم دسترس نبود اطلاعات در دیتابیس محلی ذخیره شده تا در زمانی که ارتباط با سرور برقرار شد اطلاعات به هنگام شوند.
استفاده از vcs ها به دلایلی برای توسعه دهنگان بسیار ضروری شده است، مانند:
- همکاری و تعامل : اگر تا به حال در پروژه ای به طور مشترک با چند برنامه نویس همکاری کرده باشید، زجر ارسال پروژه به یکدیگر با ایمیل و دیگر روش های موجود را کشیده اید. حتی شخصا تجربه گم کردن آخرین نسخه ی پروژه در بین نسخه های پشتیبان را هم داشته ام!
- مدیریت تغییرات : شما می توانید از اینکه چه چیزهایی در هر تغییر ویرایش شده اند را مشاهده کرده یا حتی فایل های خود را به آن نقطه بازگردانید.
- پیگیری فرد تغییردهنده : به دلیل اینکه هنگام ثبت تغییر در vcs ها نام تغییردهنده ثبت می شود، در صورت بروز مشکل می توانید مقصر آن را پیدا کنید و یا بخش هایی که یک نفر خاص در آن همکاری کرده را پیدا کنید.
- پیگیری پیشرفت پروژه : می توانید با چک کردن فایل Log سیستم و خواندن توضیحات تغییرات از نحوه ی تکامل و چگونگی پیشرفت پروژه با خبر شوید.
- شاخه سازی : یکی از کاربردی ترین امکاناتی است که این vcs ها در اختیار شما قرار می دهند. اگر برنامه نویسی و توسعه ی پروژه به طور معمول را شاخه اصلی فرض کنیم، لازم نیست برای اضافه کردن ویژگی جدید که هنوز از آن مطمئن نیستیم، آن را به پروژه اصلی اضافه کنیم. پروژه مسیر خود را طی می کند اما با ایجاد یک شاخه جدید، کار توسعه ویژگی جدید را بر روی آن انجام می دهیم و زمانی که از آن اطمینان حاصل کردیم، دو شاخه را با هم ادغام می کنیم.
مفهوم تعدادی از لغات پرکاربرد و رایج که دانستنشان برای استفاده از vcs ها لازم است را در زیر مرور می کنیم.
Repository: جایی که فایل های جاری و تاریخچه ی آن ها و در واقع همه ی اطلاعات سیستم در آنجا ذخیره شده است (معمولا بر روی سرور).
Working Copy: فایل های محلی داخل کامپیوتر هر فرد. حتی احتمال دارد شامل تغییرات ثبت نشده در سرور هم باشند.
Trunk: شاخه ی اصلی پروژه را Trunk می گویند که در بعضی از سیستم ها به آن Master یا BaseLine هم گفته می شود.
History: لیست تغییرات فایل یا پوشه ها که از زمان ساختنشان بر روی آن ها ایجاد شده است.
Latest: آخرین نسخه از فایل یا پوشه.
Revision: کدی از حروف یا عدد که نشان دهنده ی نسخه فایل است.