سیستم گیت چیست؟ کنترل ورژن برای برنامه نویسی اشتراکی

چهارشنبه 24 فروردین 1401

سیستم گیت یک پلتفرم نرم افزاری است که به طور گسترده ای توسط برنامه نویسان کامپیوتری برای همکاری بهتر مورد استفاده قرار می گیرد.

 سیستم گیت چیست؟ کنترل ورژن برای برنامه نویسی اشتراکی

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

شاید برای شما جالب باشد که بدانید گیت همچنین استاندارد کنترل ورژن برای گیت هاب و دیگر سیستم های مدیریت کد نیز به شمار می آید و به طور گسترده ای در devops برای مدیریت و پیاده سازی CI/CD مورد استفاده قرار می گیرد. برای توسعه دهندگانی که برنامه های خود را روی Kubernetes یا دیگر پلتفرم های نیتیو و مبتنی بر کلود اجرا و مدیریت می کنند GitOps می تواند بهترین روش را برای کار با کلاسترها و خوشه های containerized و همینطور اپلیکیشن ها ارائه دهد.

آیا گیت یک زبان برنامه نویسی است؟

سیستم گیت یک زبان برنامه نویسی نیست اما برای برنامه نویسان کامپیوتری که به تمام زبان های برنامه نویسی ممکن کار می کنند بسیار مهم و حائز اهمیت است. امروزه سیستم گیت استاندارد واقعی نرم افزاری است که به عنوان نرم افزار کنترل ورژن نیز شناخته می شود. برنامه نویس ها از سیستم های کنترل ورژن برای کنترل و مدیریت به روزرسانی های پایگاه کدهای بزرگ استفاده می کنند و در صورت نیاز به نسخه ها و ورژن های قبلی باز گشته، تغییراتی را در کدهای خود ایجاد می کنند و همچنین می توانند افرادی که در طول زمان در آن کد تغییراتی را اعمال کرده اند را مشاهده کنند. این روند به بخش جدایی ناپذیر از روند agile برای توسعه نرم افزار تبدیل شده است و یکی از ویژگی های اصلی GitOps به شمار می آید که فلسفه agile devops را به سیستم های مبتنی بر container گسترش می دهد.

چرا سیستم گیت را با این نام صدا می زنیم؟

نام سیستم گیت با تاریخچه آن گره خورده است. گیت توسط فردی که احتمالا نام او را بارها شنیده اید ساخته شده است. سازنده این سیستم شخصی به نام Linus Torvalds خالق سیستم عامل لینوکس است. این سیستم در سال 2005 به طور خاص برای کمک به مدیریت توسعه هسته سیستم عامل لینوکس طراحی و ساخته شده است. Linus Torvalds در آن زمان از بسیاری از سیستم های کنترل ورژن دیگری که وجود داشتند ناراضی بود و BitKeeper که در آن زمان مورد علاقه برخی از توسعه دهندگان بود نیز به طور متن باز در اختیار سایر توسعه دهندگان قرار نمی گرفت. زمانی که اولین نسخه گیت عرضه شد Torvalds توضیحات مختلفی را برای نام آن ارائه داد. محتمل ترین توضیحی که وجود داشت این بود که گیت یه کلمه سه حرفی است که تلفظ آن ساده و راحت بود و پیش از آن توسط دستور دیگری در یونیکس استفاده نمی شد. این کلمه همچنین مانند کلمه get در انگلیسی به نظر می رسد چرا که شما می توانید از سیستم گیت برای دریافت کد منبع از یک سرور استفاده کنید.

چه کسی مالک سیستم گیت است؟

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

گیت در مقایسه با گیت هاب

گیت سیستمی است که قابلیت کنترل ورژن توزیع شده را به شما ارائه می دهد. شما می توانید از سیستم گیت برای مدیریت پروژه های کدنویسی در کامپیوتر شخصی خود نیز استفاده کنید ولی معمولا از این سیستم چندین نفر استفاده می کنند که قصد دارند در چندین کامپیوتر جداگانه با یکدیگر همکاری داشته باشند. در چنین پروژه هایی نسخه متعارف کد منبع روی یک سرور قرار می گیرد( که در واقع یک مخزن مرکزی در گیت است) و سپس کاربران می توانند به روز رسانی ها را در آن مخزن آپلود کرده یا از آن دانلود کنند.

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

کنترل ورژن با گیت

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

مخزن گیت

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

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

آشنایی با commit سیستم گیت

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

نکات مهم دیگر درباره commit در گیت

یک نکته بسیار کلیدی و مهم که باید درباره commit در سیستم گیت بدانید این است که ایجاد یک commit با قرار دادن کد در محصول مشابه یکدیگر نیستند. یک commit نسخه ای از برنامه شما را ایجاد می کند که می توانید آن را بارها و بارها آزمایش و تست کنید. یک تیم توسعه می تواند به سرعت عملیات تکرار را در داخل commit ها به عنوان بخشی از فرایند رساندن یک اپلیکیشن به حالت محصول انجام دهد.

آشنایی با Git stash  در سیستم گیت

Git stash یکی از دستورات کاربردی در سیستم گیت است. اگر در حال کار کردن روی فایل های موجود در ناحیه رتبه بندی هستید و می خواهید بدون این که تغییرات خود را واقعا اعمال کنید سراغ بخش دیگری بروید می توانید از این دستور استفاده کرده و از مزایای آن بهره مند شوید. در واقع با استفاده از دستور Git stash شما می توانید این تغییرات را برای استفاده بعدی خود ذخیره کنید.

دستورات branch و merge در سیستم گیت

تا به اینجای کار ممکن است commit ها را تنها به عنوان دنباله ای خطی از اسنپ شات های کدهای خود در طول زمان تصور کنید اما یکی از جنبه های واقعا جذاب و جالب و البته قدرتمند سیستم گیت این است که می توانید از آن برای کار بر روی نسخه های مختلف برنامه خود به صورت موازی استفاده کنید که این ویژگی برای متدولوژی agile در توسعه نرم افزار از اهمیت زیادی برخوردار است.

برای درک بهتر شاخه ها و قابلیت ترکیب یا همان branche و merge در سیستم گیت فرض کنید یک اپلیکیشن با نام CoolApp دارید که نسخه 1.0 آن در حال تولید است. علاوه بر این شما در حال حاضر در حال کار کردن روی CoolApp 2.0 نیز هستید و قصد دارید انواع ویژگی های سرگرم کننده جدید را به آن اضافه کنید که در قالب مجموعه ای از commit ها در مخزن خود آنها را توسعه می دهید. پس از مدتی متوجه می شوید که نسخه 1.0 برنامه شما دارای یک نقص امنیتی بسیار جدی است و فورا نیازمند یک به روز رسانی است. در چنین شرایطی شما می توانید به commit خود در نسخه 1.0 باز گردید و تغییرات مد نظرتان را اعمال کرده و سپس نسخه جدید را در قالب نسخه 1.1 به بخش تولید بفرستید. شاید برای شما جالب باشد که بدانید تمام این موارد بدون هیچ تغییری در نسخه 2.0 قابل انجام است. در واقع می توان گفت نسخه های 1.1 و 2.0 در شاخه های مختلف پایگاه کد شما قرار دارند. از آنجایی که نسخه 1.1 در حال تولید است در حالی که نسخه 2.0 در حال توسعه است ما نسخه 1.1 را نسخه اصلی اپلیکیشن شما می نامیم.

ویژگی Git checkout را بیشتر بشناسید

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

استفاده از سیستم گیت برای همکاری با دیگران

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

دستور clone در گیت

ساده ترین راه برای شروع همکاری با دیگران در یک پروژه شبیه سازی مخزنی است که از قبل در یک کامپیوتر دیگر وجود دارد. Cloning قابلیتی است که کل محتوای آن مخزن را برای شما در مخزن دلخواهتان دانلود می کند. در بخش های قبلی درباره مفهوم مخزن مرکزی صحبت کردیم و اطلاعاتی را در این خصوص در اختیار شما قرار دادیم. در زمان انجام پروژه های مختلف این مسئله بسیار رایج است که چنین مخزن هایی را که در گیت هاب یا سیستم های کنترلی دیگر وجود دارند را به عنوان منبع اصلی در نظر می گیرند. یک نکته بسیار مهم که در این جا باید به آن دقت داشته باشید این است که سوال درباره این که کدام مخزن در واقع به عنوان مخزن مرکزی شناخته می شود قراردادی است که بین شرکت کنندگان در یک پروژه اتخاذ می شود و چنین چیزی توسط خود سیستم گیت اجرا نمی شود. از نظر تئوری شما می توانید مخازن مختلفی داشته باشید که کدهای خود را بدون هیچ مخزن مرکزی تبادل می کنند.

Git pull و Git push

در بخش های قبلی درباره این موضوع صحبت کردیم که سیستم گیت چگونه می تواند دو شاخه از commit ها را به صورت سازگار در یک دستگاه قرار دهد. این دستورات می توانند دقیقا همین کار را برای دو شاخه مختلف در دستگاه های جداگانه انجام دهد. این دو دستور نیز دقیقا از همان تکنیک هایی که در بخش های قبلی درباره آنها صحبت کردیم استفاده می کنند. این فرایند در واقع فرایندی است که توسط آن یک شاخه بین دستگاه ها جا به جا می شود که بسته به نحوه شروع کار یک pull یا یک push نامیده می شود. اگر قصد دارید که یک شاخه را از یک سرور از راه دور به دستگاه خود بیاورید شما در حال انجام عملیات pulling هستید. در صورتی که قصد دارید یک شاخه را از دستگاه خود به دستگاه دیگری ارسال کنید شما در حال انجام pushing خواهید بود.

درخواست pull در سیستم گیت

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

درخواست pull نه تنها به مدیران پروژه این امکان را می دهد که مشارکت شما را بپذیرند یا رد کنند بلکه یک انجمن گفتگوی کوچک را نیز در مخزن مرکزی ایجاد می کند که در آن همه اعضای پروژه می توانند در مورد این درخواست صحبت کنند. این یک روش کلیدی است که در آن توسعه دهندگان می توانند تغییراتی که در پایگاه کد ایجاد می شود را هش کنند که این ویژگی به خصوص در پروژه های متن باز در سیستم گیت که شامل مشارکت تعداد زیادی از افراد است از اهمیت بالایی برخوردار خواهد بود.

Git fork و ویژگی های آن

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

کار کردن با سیستم گیت روی ویندوز

همانطور که قبلا نیز بیان کردیم سیستم گیت در ابتدا برای هسته لینوکس توسعه داده شده است و در ابتدا به شکل یک سری از ابزارهای خط فرمان بود. ساختار و دستورات آن کاملا مبتنی بر یونیکس بود و این به آن معناست که کم و بیش به صورت محلی بر روی سیستم عامل های مشابه یونیکس مانند لینوکس و macOS اجرا می شود. انتقال سیستم گیت به سیستم عامل ویندوز کمی پیچیده تر است و برای انجام این کار شما به ابزار Git bash که یک شبیه ساز پوسته Bourne برای ویندوز است نیاز پیدا خواهید کرد.

ادغام GUI و IDE در این سیستم

همانطور که می دانید امروزه بسیاری از توسعه دهندگان ویندوز به استفاده از رابط کاربری گرافیکی عادت دارند و به همین علت نیز سیستم گیت برای ویندوز دارای یک رابط کاربری بسیار جذاب نیز می باشد. البته کاربران سیستم عامل های لینوکس و macOS نیز نباید احساس نگرانی در خصوص این موضوع داشته باشند چرا که رابط های کاربری زیادی برای آنها نیز وجود دارد که می توانند از میان آنها هر یک را بر اساس سلیقه خود انتخاب کنند. نکته جالب تر درباره این موضوع این است که رابط های کراس پلتفرم زیادی نیز برای سیستم گیت وجود دارد که هر یک از آنها طرح ها و رنگ های خاص و منحصر به فردی را به شما ارائه می دهند و کار کردن با این سیستم را برای شما ساده تر و جذاب تر می کنند. علاوه بر این شما می توانید گیت را در IDE های مورد علاقه خود از جمله Eclipse و Microsoft Visual Studio نیز مورد استفاده قرار دهید.

اگر دوست دارید بیشتر با گیت آشنا شوید می توانید از آموزش جامع Git از مقدماتی  استفاده کنید.

 

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید