Git Introduction | معرفی گیت
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
- VCS (Version Control System)
سیستمی که تمامی تغییرات اعمال شده روی فایلها و پروژهها را ثبت میکند تا در صورت نیاز بتوان به نسخههای خاصی در گذشته (مثلاً وضعیت پروژه در ۱۰ روز پیش) بازگشت.
- Local VCS
اولین نسل از سیستمهای کنترل نسخه که تغییرات را در یک پایگاه داده ساده روی سیستم محلی (لوکال) کاربر ذخیره میکردند. بازیابی فایلهای قدیمی در این سیستم با دشواری همراه بود.
- Centralized VCS (CVCS)
سیستمی که در آن یک سرور مرکزی شامل تمامی نسخههای فایلهاست و برنامهنویسان به آن متصل میشوند. بزرگترین نقص آن این است که اگر سرور مرکزی از کار بیفتد یا هارد آن آسیب ببیند، کل تاریخچه پروژه از دست میرود.
- Distributed VCS (DVCS)
نسل پیشرفتهای که Git نیز جزو آن است. در این مدل، هر کاربر یک نسخه کامل از کل پروژه و تاریخچه آن (Repository) را روی سیستم خود دارد. این یعنی هر سیستم یک نسخه پشتیبان کامل از سرور مرکزی است.
- Branch
یک شاخه یا کپی جداگانه از کد اصلی پروژه که به برنامهنویس اجازه میدهد بدون خراب کردن کد اصلی، روی یک ویژگی (Feature) جدید یا رفع یک باگ کار کند.
- Merge
فرآیند ترکیب تغییرات ایجاد شده در یک Branch جداگانه با شاخه اصلی پروژه، پس از اطمینان از صحت عملکرد کدها.
- Conflict
زمانی رخ میدهد که دو نفر همزمان روی یک بخش از یک فایل تغییراتی اعمال کنند. در این حالت سیستم نمیتواند به طور خودکار تصمیم بگیرد کدام تغییر درست است و نیاز به مداخله برنامهنویس دارد.
نکات مهم مصاحبهای
-
چرا استفاده از Git برای کارهای تیمی ضروری است؟
چون اجازه میدهد چندین نفر همزمان روی یک پروژه کار کنند، تغییرات یکدیگر را ردیابی کنند، تعارضات کدی (Conflict) را حل کنند و در صورت بروز خطا، به نسخههای سالم قبلی بازگردند. -
تفاوت اصلی CVCS و DVCS در چیست؟
درCentralized VCSفقط یک نسخه مرکزی وجود دارد و اگر سرور از دسترس خارج شود، کار متوقف میشود. اما درDistributed VCS(مانند Git)، هر برنامهنویس یک نسخه کامل از پروژه را دارد و وابستگی مطلق به اینترنت یا سرور مرکزی برای کار وجود ندارد. -
چه زمانی از Branch استفاده میکنیم؟
هر زمان که بخواهیم ویژگی جدیدی اضافه کنیم یا تغییری ایجاد کنیم که ممکن است کد اصلی را خراب کند، یکBranchمیسازیم تا توسعه به صورت ایزوله و موازی انجام شود. -
سیستم کنترل نسخه چه کمکی به رفع باگ در محیط عملیاتی (Production) میکند؟
اگر در نسخه فعلی باگی پیدا شود که قابل استفاده نباشد، میتوان با کمکVCSسریعاً به آخرین نسخه سالم (Stable) بازگشت و در عین حال روی نسخه باگدار برای رفع مشکل کار کرد.
مثال یا سناریوی کاربردی
تصور کنید در حال توسعه یک سیستم مدیریت کتابخانه هستید:
ایجاد شاخه جدید: برای اضافه کردن بخش "امانت کتاب"، یک Branch جدید از کد اصلی میگیرید. این کار باعث میشود کد اصلی شما دستنخورده باقی بماند.
توسعه موازی: همزمان همکار شما میتواند روی Branch دیگری برای بخش "مدیریت کاربران" کار کند بدون اینکه کدهای شما با هم تداخلی داشته باشد.
بررسی و ترکیب: پس از پایان کار و تست کدها، شاخه "امانت کتاب" را با شاخه اصلی Merge میکنید. اگر همکارتان هم کدهایش را Merge کند، حالا هر دو ویژگی در کد اصلی کنار هم قرار میگیرند.
حل تعارض: اگر هر دو نفر شما یک خط از فایل تنظیمات را تغییر داده باشید، در مرحله Merge یک Conflict رخ میدهد که باید با بررسی کدها، نسخه نهایی را انتخاب کنید.
بیشتر بدانید
-
تاریخچه: گیت در سال ۲۰۰۵ توسط لینوس توروالدز (خالق لینوکس) برای مدیریت توسعه هسته لینوکس ساخته شد.
-
عملکرد: گیت بسیار سریع و سبک است و از عملیاتهای غیرمخرب استفاده میکند، به این معنی که ریسک از دست رفتن کدها در آن بسیار پایین است.
-
دستورات پایه: دستوراتی مانند
git cloneبرای گرفتن کپی از پروژه،git pullبرای دریافت آخرین تغییرات وgit pushبرای ارسال کدها به سرور از پرکاربردترین کامندها هستند. -
ارتباط با سرویسهای ابری: گیت ستون فقرات سرویسهای بزرگی مانند GitHub و GitLab است که برای میزبانی پروژههای نرمافزاری استفاده میشوند.
