انواع مختلف سورس کنترل و تفاوت آن ها

داشتن ورژن‌های مختلف فایل‌های هر پروژه نرم افزاری و یا هر پروژه دیگری از قبیل فایل های یک کتاب که در حال نگارش است و هر فایل یا مجموعه فایل دیگری، حتی در پروژه‌های فردی نیز امری مطلوب به نظر می‌رسد که فواید و کاربردهای خاص خود را دارد که البته این موضوع در پروژه‌های گروهی نه فقط مطلوب بلکه لازم و ضروری است.

نرم‌افزارهای مدیریت کد از لحاظ نحوه نگهداری و مدیریت کد (source control) به طور کلی به دو دسته توزیع شده (distributed) و متمرکز (centeralized) تقسیم می‌شوند:

سورس کنترل مرکزی یا Centeralized

  • در روش مرکزی یک server و تعدادی client وجود دارد. به این صورت که تمامی تغییرات در server ذخیره می‌شود و کاربران (برنامه‌نویس‌ها) با استفاده از client تغییرات جدید را اعمال کرده و یا تغییرات دیگران را دریافت می‌کنند.

در این نوع سورس کنترل ها داده های مدیریتی و متادیتاها (metadata) بر روی سرور نگهداری می شود و کلاینت ها تنها بخش یا کل سورس را در یک ورژن مشخص دارند و تاریخچه تغییرات بر روی هر کلاینت نگهداری نمی شود. در این روش اگر اطلاعات روی سرور مخدوش شود و یا به هر دلیلی سرور از کار بیافتد کلاینت ها به مشکل بر می خورند و امکان checkin یا checkout فایل ها وجود نخواهد داشت.

سورس کنترل توزیع شده یا Distributed

  • در روش مرکزی server حذف شده‌است و هر فرد می‌تواند یک server باشد و تاریخچه کامل را در اختیار داشته باشد. در این دسته تغییرات می‌تواند بدون در اختیار داشتن ارتباط آنلاین انجام شود.

در روش توزیع شده برای برطرف کردن مشکلات روش متمرکز یک کپی کامل از همه فایل های پروژه و تاریخچه تغییرات هر فایل و همچنین فایل های مدیریتی و متادیتا ها نزد تک تک کلاینت ها وجود دارد. با این حساب اگر سرور در دسترس نباشد هر کلاینت مستقلا کار می کند و حتی امکان بازیابی اطلاعات از روی کلاینت ها بر روی سرور نیز وجود دارد.

قبلا برای کنترل ورژن های مختلف یک فایل، از روش های مختلف از قبیل subversion استفاده می‌شد که تغییرات نسبت به ورژن قبل را نگه می‌داشت، البته این روش در کارهای تیمی نیاز به سرور مرکزی داشت و محدودیت هایی از قبیل اینکه کاربران باید به صورت آنلاین و برخط کار می کردند آزار دهنده بود و یا اینکه داشتن همه نسخه ها برای کاربران امکان پذیر نبود و یا با زحمت زیادی همراه بود. اما با معرفی روش توزیع شده در گیت (git) در سال ۲۰۰۵ توسط مخترع لینوکس (linus torvalds)، همه برنامه نویسان و گسترش دهندگان نرم افزار به برتری این روش اذعان کردند و هم اکنون بسیاری از شرکت‌های بزرگ نیز پروژه‌های خود را با این روش در سایت های مانند github, gitlab و یا سایر سرویس های موجود که مبتنی بر git هستند نگهداری می کنند. با این حال هنوز هم هستند شرکتهایی که از روش‌های قدیمی مانند داشتن یک فایل متن در هر پوشه، هارد کپی و ... استفاده می‌نمایند.

تفاوت git و subversion

اگر مایلید که اطلاعات بیشتری در خصوص source control ها داشته باشید با ما همراه شوید چرا که در ادامه به بررسی چند سرویس پرطرفدار و پرکاربرد نظیر github و tfs خواهیم پرداخت.