اصطلاح کنترل کدمنبع ( source control ) یا کنترل نسخه ( version control، همچنین revision control ) به عمل مدیریت، کنترل و ثبت و ضبط مستنداتی همچون کدها و مستندات نرم افزاری، اطلاعات وبسایتها، تاریخچهی تغییرات تصاویر و مواردی از این دست اطلاق میشود. تغییرات معمولا با یک شماره نسخه ذخیره میشوند. سیستمهای کنترلنسخه ( version control systems ) هم بصورت مجزا برای کنترل تغییرات نوشتهها و کدها و در مواردی کنترل تصاویر و فایلهای ویدیویی ساخته و عرضه میشوند و هم در برخی از نرمافزارهای واژهپرداز یا ویرایشگرهای تصویر و سایر انواع مستندات بصورت درونی پیادهسازی شدهاند. نرمافزارهای کنترل نسخه، پایهی کارهای تیمی در تیمهای نرم افزاری متشکل از چند توسعهدهنده است. در تیمهای نرمافزاری، انتشار نسخههای مختلف از نرمافزار، توسعه بصورت تیمی و رفع کردن باگها بصورت اشتراکی و مواردی از این دست همواره درحال انجام هستند. این امور بدون حضور نرمافزاری قدرتمند برای کنترل امور، بسیار سخت، با پتانسیل بالای خطا و طاقت فرساست و البته نتیجهی حاصل هم آنچه که باید باشد، نیست. سیستمهای کنترل نسخه و مدیریت کد منبع امور ذکر شده را از هر زمانی آسانتر کردهاند.
کنترل نسخه روشی برای ثبت تغییرات کدها و نوشتههایمان است، با این امکان که هرگاه بنا برنیازمان به مرحلهی خاصی از تغییرات ثبت شده برویم.
روشها و همچنین ابزارهای زیادی برای این کار معرفی شده اند و git یکی از این ابزارهاست که یکی از بهترین برنامهنویسان یعنی لینوس توروالدز -خالق لینوکس- آن را برای اولین بار برای توسعهی کرنل لینوکس توسعه داد و هم اکنون به ابزاری کلیدی در عمدهی پروژههای برنامهنویسان بدل شده است.
در سرتاسر اینترنت میتوانید داستانهای زیادی از دلیل و تاریخچهی ایجاد گیت بخوانید، این نوشتار تنها نگاهی کوتاه و کاربردی به این موضوع دارد.
اگر تابحال تجربهای هرچند کوتاه در برنامهنویسی داشته باشید احتمالا تجربه از دست دادن بخشی از پروژه را به دلایل گوناگون مثل ذخیره ناخواسته در هنگام قطعی برق یا تغییراتی که بعدا باعث بروز مشکل شدهاند و دلایل بیشمار دیگر را داشتهاید. بهعنوان راهحل هم شاید روشهایی مانند کپیگرفتن از کل فایلها و اطلاعات پروژه در زمانهای مختلف برای حفظ حالت خاصی از تغییرات را استفاده کرده باشید.
این کار تا حدی جواب میدهد، اما در این صورت با انبوهی از دایرکتوریهایی که مانند یک غول بیشاخ و دم بزرگ میشوند چه میکنید؟ و از آن بدتر چگونه آن را با افراد دیگری که با شما در انجام آن همکاری میکنند مشترک میشوید؟
ابزارهای مدیریت کد منبع پاسخی برای این شلختگیها و شلوغیهاست. با استفاده از این ابزارها میتوانید هرلحظه ای که مایل بودید تغییرات خود را ثبت کنید، به تغییرات ثبت شده در گذشته برگردید و به راحتی با دوستان و افراد تیمتان روی پروژه ای همکاری کنید، بدون اینکه نگران بهمریختگی و نامنظم شدن کدهای پروژه باشید. میتوانید برای هر تغییر که ثبت میکنید توضیحاتی بنویسید، تغییراتی که دیگران در پروژه لحاظ نموده اند را ببینید و البته منشاء باگها و خطاهای احتمالی را به سادگی یافته و رفع و رجوع کنید.
در این میان ابزارهای زیادی برای ایندست کارها ساخته شده است که هرکدام نگاه و شیوهی متفاوتی را برای حل این مشکل در پیش گرفته است. معروفترین این ابزارها عبارتند از git، svn، mercurial و cvs که البته در این میان git یکی از جوانترین و پرطرفدارترین ابزارهای مدیریت کدمنبع است و ویژگیهای ساده و متمایز آن باعث شده عمدهی تیمهای نرمافزاری در دنیا به استفاده از این ابزار خوب روی بیاورند. در این کتاب با گیت آشنا میشویم.
گیت یک سیستم مدیریت کد منبع توزیع شده است که میتوانید نوشتهها و کدهایتان را با آن در سیستم شخصی خودتان مدیریت کنید و تغییرات کدهایتان را داشته باشید، به تغییراتی در گذشته برگردید مثلا به ریلیز خاصی از پروژه، کدها را روی یک سرور گیت ( مانند گیت هاب) با دیگران سهیم شوید و گروهی روی توسعهی یک پروژه همکاری کنید و از تغییراتی که هر عضو روی پروژه میدهد آگاهی یابید.
به پروژههایی که در آنها گیت استفاده میشود مخزن ( repository ) میگویند. بک مخزن گیت حاوی تمامی کدها، تغییرات کد و تنظیمات گیت برای آن پروژه است.
در سیستمهای توزیعشده هرکسی که به مخزن اصلی دسترسی دارد، می تواند یک کپی از مخزن اصلی را در اختیار داشته و تغییرات خود را روی آن اعمال کند و همچنین میتواند این تغییرات را با تغییرات بقیهی اعضا ترکیب کرده و یا به مخزن اصلی اضافه کند.
امروزه اشخاص و شرکتهای کوچک و بزرگ زیادی از سیستم مدیریت کد منبع گیت برای کنترل کدهای نرمافزارها، پروژه ها و مستندات استفاده میکنند. کرنل لینوکس ، زبان برنامهنویسی روبی و فریمورک لاراول نمونه ای از پروژه هایی هستند که بر روی سرویس گیت هاب نگهداری می شوند.
گیت به تغییرات کدها تنها به عنوان چند خطی که تغییر میکنند نگاه نمیکند و پس از ثبت هر تغییر (اصطلاحا کامیت ( commit )) یک تصویر کلی از پروژه را در لحظهی آن تغییر ذخیره میکند و بررسی تغییرات با اطمینان و سرعت بالاتری امکانپذیر میشود.
همچنین گیت برخلاف بسیاری از سیستمهای مدیریت کد منبع وابستگی به سرور اصلی ندارد و تقریبا هرکاری را میتوان بصورت محلی ( local ) انجام داد، در هر لحظه ای و هر شرایطی کافیست تنها گیت را روی سیستم خود داشته باشید، تغییراتتان را ثبت کنید و هر زمان که به شبکهای که سرور گیت شما در آن قرار دارد ( مانند اینترنت!) دسترسی داشتید میتوانید تغییرات ذخیره شده را به مخزن روی سرور اضافه کنید و البته تمام تغییرات پروژه را هم بدون نیاز به اینترنت در مخزن محلی خود داشته باشید.
استفاده از گیت بسیار ساده است. تیم توسعهی گیت یک نرمافزار تحت خط فرمان برای استفاده از گیت ساخته است. همچنین پروژه های زیادی هم برای کار با گیت چه بهعنوان افزونه ( plugin ) برای ویرایشگرها و محیطهای مجتمع توسعه و چه بصورت برنامههای جدا با رابط گرافیکی توسعه داده میشوند و امروز تقریبا در هرمحیطی میتوان روشی برای استفاده از گیت یافت.