آشنایی با GIT

Git سامانه کنترل ورژن برای پروژه های نرم افزاری میباشد که به دلایل سرعت، پایداری و مدل همکاری برنامه نویسان در پیاده سازی پروژه به صورت توزیع شده، محبوب میباشد. Git در سال 2006 برای مدیریت پیاده سازی هسته لینوکس ایجاد شد و هم اکنون دارای ابزارهای گوناگون، تیم فعال برنامه نویسی و چندین سرویس مجانی هاست سورس کد میباشد.

مقالات مرتبط

Git سامانه کنترل ورژن برای پروژه های نرم افزاری میباشد که به دلایل سرعت، پایداری و مدل همکاری برنامه نویسان در پیاده سازی پروژه به صورت توزیع شده، محبوب میباشد. Git در سال 2006 برای مدیریت پیاده سازی هسته لینوکس ایجاد شد و هم اکنون دارای ابزارهای گوناگون، تیم فعال برنامه نویسی و چندین سرویس مجانی هاست سورس کد میباشد.

این مقاله اولین مقاله از سری مقالات آشنایی با Git میباشد.

اگر با سیستمهای کنترل ورژن قدیمی همچون SVN و یا CVS قبلا کار کرده اید قبل از ادامه مطالعه این مقاله تمامی اطلاعاتی که در رابطه با این سیستمها دارید را کنار بگذارید زیرا Git از پایه دوباره طراحی شده است و خیلی کم در طراحی آن از سیستمهای کنترل ورژن دیگر الهام گرفته شده است.

توسعه نرم افزار به صورت توزیع شده یا distributed از نظر اصول با سیستم های کنترل ورژن مرکزی یا centeral متفاوت میباشد. به جای اینکه تمامی فایلهای پروژه در یک repository مرکزی ذخیره شوند، Git به هر برنامه نویس تیم یک کپی کامل از repository را اختصاص میدهد. برای ایجاد امکان همکاری بین برنامه نویسان در یک پروژه Git قابلیت به اشتراک گذاری تغییرات بر روی repository های برنامه نویسان مختلف با یکدیگر را فراهم آورده است.

اشتراک repository ها در Git

دارا بودن یک نسخه کامل از repository بر روی رایانه هر برنامه نویس تاثیر عمیقی بر حلقه تولید نرم افزار خواهد داشت برخی از مزایای آن عبارتند از:

سرعت اجرای دستورات

اجرای دستورات مربوط به کنترل ورژن به جای آنکه نیاز به تماس با سرور مرکزی از طریق شبکه باشد به صورت local اجرا میشوند که خود باعث بالا رفتن سرعت اجرا میشود. همچنین در صورتی که ارتباط با سرور مرکزی میسر نباشد شما همچنان قادر به کد نویسی و پیشبرد پروژه خواهید بود.

پایداری

از آنجا که هر برنامه نویس دارای یک نسخه کامل از repositroy میباشد ریسک خرابی سورس کد به علت خرابی سرور و یا پایگاه داده و یا هر دلیل دیگری بسیار کاهش میابد.

جداسازی

هر نسخه از repository چه بر روی رایانه برنامه نویس باشد و چه بر روی سرور در بردارنده تاریخچه کامل پروژه میباشد. از آنجا که تغییرات اعمال شده بر روی repository های local سریعاً منتشر نمیشوند این امکان به برنامه نویسان داده میشود که قبل از منتشر کردن کد خود از درستی آن اطمینان حاصل کنند و آزادانه به تست آن بپردازند.

یکپارچه سازی

از آنجا که تاریخچه پروژه در هر کپی از repository موجود میباشد امکان ردیابی تغییرات هر کپی موجود میباشد. به محض اینکه شما یک کامیت به صورت بومی یا local commit را اعمال کنید repository شما با دیگر repository ها از sync خارج میشود. Git با استفاده از تاریخچه تغییرات local اقدام به یکپارچه سازی کدهای مختلف برنامه نویسان مختلف میکند.

آشنایی با ساختار Git

هر repository دارای چهار بخش میباشد:

پوشه حاوی پروژه یا working directory

پوشه پروژه محل نگهداری فایلهای پروژه میباشد. در این پوشه شما اقدام به ویرایش، کامپایل و کد نویسی پروژه میکنید. پوشه حاوی پروژه فرق چندانی با پوشه های معمولی ندارد به جز اینکه شما در آنها دسترسی به فرمانهای گوناگون برای ثبت، ویرایش و انتقال محتوای پوشه به دیگر repository ها را دارید.

پوشه حاوی پروژه در Git

Staging Area

Staging area مرحله ایست که تغییرات روی پروژه قبل از ثبت در تاریخچه پروژه در آن قرار میگیرند. در حقیقت این لایه بین پوشه پروژه و تاریخچه پروژه قرار دارد. به جای اینکه مجبور باشید تمامی تغییرات را به یکباره commit کنید شما میتوانید تغییرات را گروه بندی کنید و سپس آنها را در تاریخچه ثبت کنید. توجه داشته باشید که تغییرات ذخیره شده در staging area هنوز جزء پروژه نیستند و بین دیگر نسخه های repository به اشتراک گذاشته نمیشوند.

git statging area

تاریخچه کامیتها

زمانی که شما تغییرات اعمال شده بر روی نسخه local پروژه را تنظیم کردید میتوانید تغییرات حاصله را commit کنید و آنها را در تاریخچه پروژه ثبت کنید. رکوردهای موجود در تاریخچه توسط git فقط مدیریت میشوند و تغییری بر روی آنها اعمال نمیشود. البته ابزارهایی برای ویرایش تاریخچه به صورت دستی موجود میباشد.

تاریخچه کامیتها

شاخه ها یا Development Branches

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

شاخه زدن در git

توجه داشته باشید که branch های git مانند دیگر سیستم های مدیریت ورژن مرکزی عمل نمیکنند. ساخت، ترکیب و اشتراک آنها بسیار ساده تر میباشد. در نتیجه اکثر برنامه نویسان از شاخه ها برای هر کاری در پروژه استفاده میکنند از پیاده سازی طولانی مدت برخی از قابلیتهای پروژه گرفته تا رفع اشکالات پنج دقیقه ای.

در مقاله بعدی با نحوه نصب و برخی از تنظیمات و فرمانهای git آشنا خواهیم شد.