
Git چیست؟
توی دنیای برنامه نویسی نه تنها امروز بلکه همیشه نگهداری و تغییرات کد همیشه از بزرگترین چالش ها و دردسر ها بوده. این مشکل ها با اومدن سیستم های کنترل ورژن یا Version Control System (VCS) مثل Git برطرف شد و واقعا مثل راه نجاتی برای توسعه دهنده های نرم افزار بود.
الان مهم نیست که میخواید توی دنیای برنامه نویسی چه مسیری برید میخواد استخدام شدن داخل یک شرکت باشه یا وارد شدن به یک تیم توسعه باشه و یا حتی صرف نظر از اینکه چه زبان برنامه نویسی کار میکنید پایتون(اگر علاقه به یادگیری pythonدارید آموزش پایتون رو به صورت رایگان ببینید) یا جاوااسکریپت و .. باید با گیت آشنا باشید.
در ادامه میگیم که چی شد که اصلا به سیستم های کنترل ورژنی مثل گیت (git) احتیاج پیدا کردیم.
توسعه بدون Git چه مشکلی داره؟
فرض بگیرید که اصلا گیت وجود نداره، شما یک پروژه دارید با یک تیم ده نفره (میتونه خیلی خیلی هم بیشتر باشه) و قراره سال ها یک نرم افزار رو توسعه بدید.
حالا وقتی هر تیم روی یک feature یا قابلیت کار میکنه، در طی زمان چطور مدیریت کنیم که هر قابلیت یا تغییر توسط چه کسی، کجای پروژه، چه زمانی این تغییرات رو اعمال کرده؟
حالا فرض کنید تیم بزرگه و قراره کلی قابلیت و تغییر ایجاد بشه و مدیریت این ها توی سال های طولانی، بگیم غیر ممکنه واقعا اغراق نیست.
پس متوجه شدید چرا الان بلد بودن git دیگه ربطی به جونیور و سنیور بودن برنامه نویس نداره، برای همه واجبه یادگیریش پس باید به شرکت ها و تیم ها حق داد بلد نبودن git رو از هیچ برنامه نویسی قبول نکنن.
بعضی برنامه نویس ها ورژن های مختلف یک برنامه رو با ایجاد folder های مختلف با اسامی مختلف توسعه میدن که تحت هیچ شرایطی امروزه دیگه توجیه نداره به این روش توسعه دادن.
گیت (Git) چیست؟
بدون شک git محبوب ترین سیستم کنترل ورژن هست که به برنامه نویس ها کمک میکنه که تغییرات کدهاشون رو مدیریت کنن. میتونین گیت رو مثل یک ماشین زمان برای پروژه هاتون در نظر بگیرید که در طی زمان نسخه های مختلف (یا تغییرات) پروژه تون رو ذخیره میکنه و هر وقت که خواستید که به نسخه های قبلی (یا قبل از اعمال شدن یکسری تغییرات) برگردید و یا حتی تغییرات اعمال شده رو پیگیری کنید.
مفاهیم اصل گیت (Git)
git بخش های خیلی زیادی داره ولی مهم ترین اون ها شامل:
1- شاخه (Branch)
هر شاخه مثل یک خط (مسیر) جداست که از خود پروژه ایجاد میشه. مثلا برای اینکه یک قابلیت رو برنامه اضافه کنید یک شاخه از پروژه ایجاد میکنید و توسعه و تست اون قابلیت رو اونجا انجام میدید. اینجوری کد اصلی هم دست نمیخوره و آسیبی به پروژه اصلی زده نمیشه.
2- ادغام (Merge)
وقتی که کارتون توی شاخه (Branch) که برای توسعه یا تست یک قابلیت تموم شد اون رو با شاخه اصلی پروژه (که معمولا به اسم master یا main) است ادغام میکنید که به Branch اصلی پروژه هم اضافه بشه مثل عکس زیر:
ذخیره تغییرات (commit)
هر بار که تغییراتی رو در ذخیره میکنید (commit میکنید) گیت یک نسخه امن از پروژتون رو نگه میداره که قرار نیست تغییر کنه مگر اینکه خودتون مخصوصا بخواید این کارو بکنید.
اینطوری بعدا میتونین به هر نقطه ای از پروژه برگردید که خیلی کمک کنندس مخصوصا در توسعه های بلند مدت.
چطوری با git کار کنیم؟ مثال ساده با گیت
فک کنید یک وبسایت دارید که فقط چند صفحه ساده داره. حالا شما میخواید سبد خرید به پروژه اضافه کنید، اولین کاری که می کنید یک شاخه (Branch) جداگونه ایجاد میکنید و سبد خرید رو اونجا توسعه میدید و بعد از اتمام کار و تست های لازم اون رو با شاخه اصلی پروژه ادغام (merge) میکنید.
در همین زمان ممکنه یک شخص دیگه توی تیم روی یک branch دیگه در حال اضافه کردن فرم تماس به سایت باشه. اینطوری اشخاص مختلف میتونن یک پروژه رو توسعه بدن بدون درگیر کردن branch اصلی پروژه.
حتی اگر بعد از ادغام کردن شاخه ها مشکلی باشه میتونید به نسخه قبلی برگردید یا کلا تغییرات خاصی رو حذف کنید، همه این ها با گیت به سرعت و سادگی انجام میشه.
چرا همه برنامه نویس ها به گیت نیاز دارن؟ git چه مزایایی داره؟
جدای از اینکه بلد بودن git شرط استخدامی ها و ورود به تیم ها شده ولی دلایل دیگه هم برای استفاده از گیت هست که در ادامه مهمترین مزایای استفاده از گیت رو توضیح میدیم مثل:
1. مدیریت تغییرات کد و جلوگیری از تداخل
همین طور که بالاتر هم گفتم با استفاده از گیت میتونید تغییرات کد رو به صورت منظم ذخیره کنید تا تغییرات برنامه رو در طول زمان مدیریت کنید.
مزیت این کار اینه که افراد مختلف میتونن روی یک کد پایه (codebase) کار کنن، بدون اینکه تغییرات همدیگه رو بازنویسی یا خراب کنن. با گیت میشه هر تغییر رو به صورت جداگانه ردیابی کرد (که چه کسی، کجا، چه زمانی چیزی رو تغییر داده).
حتی اگر تغییرات مختلف در زمان merge کردن با هم تداخل داشتن و باعث بروز مشکل شد چون تغییرات ثبت شده میشه به سادگی به نسخه قبلی برنامه برگشت و دلیل مشکل رو از روی commit های ثبت شده جویا شد.
2. ماهیت توزیع شده گیت (Git)
یکی از بزرگ ترین مزیت های گیت که بهش توجه نمیشه همین سیستم توزیع شده (Distributed) گیت هستش. در گیت وقتی که مخزن (repository) رو کلون میکنید تا اون پروژه رو داخل سیستم خودتون داشته باشید، درواقع تمام تاریخچه پروژه که مثل شاخه ها (branch) و commit ها و... رو هم داخل سیستم لوکال برنامه نویس کپی میشه که مزیت های خودش رو داره مثل:
- - دسترسی آفلاین: حالا که تمام اطلاعات مخزن رو داخل سیستم لوکال کلون شده دیگه بدون نیاز به اینترنت هم به تاریخچه پروژه دسترسی کامل دارید و حتی میتونید branch و commit های جدید به پروژه اضافه کنید و یا حتی شاخه branch پروژه رو تغییر بدید.
نکته: درسته که این تغییرات در سیستم شما رخ داده ولی در سمت سرور (مخزن اصلی) این تغییرات ثبت نشده.
پیشنهاد میشه تا حد امکان تغییرات کوچیک رو با git push در سرور هم آپدیت کنید و زود به زود با دستور git pull مخزن بروز شده رو بگیرید که اگر بقیه اعضای تیم تغییری رو اعمال کردن متوجه بشید که از بروز Conflict و تداخل های بزرگ توی برنامه جلوگیری بشه. - - سرعت بالا: چون بیشتر عملیات ها در گیت به صورت لوکال قابل انجامه، خیلی انجام اون ها سریع تر است. مثلا برای ساخت یک branch (شاخه) کامل از پروژه در حد میلی ثانیه زمان نیازه و این شامل دستوراتی مثل commit، merge و حتی مقایسه تغییرات با دستور diff هم میشه که کاملا سریع و آفلاین قابل انجامه.
3. رایگان و متن باز (Open Source)
گیت با داشتن اکوسیستم بسیار بزرگ و منابع خیلی زیاد هیچ نیازی به خرید لایسنس برای استفاده نداره و کاملا به صورت رایگان قابل دسترسه که همین موضوع از دلایلی هست که git انقدر محبوب شده.
4. ادغام با پلتفرم و ابزار های مختلف
گیت با خیلی از ابزارها و پلتفرم های توسعه مثل GitHub، GitLab، Bitbucket خیلی خوب کار میکنه. حالا اینکه هماهنگی و ادغام پذیر بودنش به چه دردی میخوره؟ خب این انعطاف پذیری و چندکاره بودن git کاربرد هایی مهمی داره مثل:
- - مثلا میتونید از Github برای میزبانی مخزن (repository) و مدیریت پروژه استفاده کنید که هم باعث میشه محل امنی برای نگهداری کد ها داشته باشید هم بستر خوبی باشه که بقیه اعضای تیم روی پروژه کار کنن
- - ابزار های CI/CD (مثل GitHub Actions) رو با گیت ادغام کنید تا فرایند تست و build و deploy خودکار بشه مثلا:
بعد از بروز شدن مخزن github پروژه شما بعد از انجام شدن تست ها و بدون مشکل بودن build پروژه، دیپلوی انجام بشه و تغییراتی که مثلا در branch اصلی (مثل master با main) رخ داده رو در پروژه آنلاین شما هم خودکار به روز بشه.
5.یکپارچگی تاریخچه (Integrity)
استفاده از SHA-1 برای شناسایی کامیت ها:
گیت برای امنیت نگهداری تاریخچه از هش SHA-1 برای شناسایی استفاده میکند. مزیتش اینه که پیگیری تغییرات در آینده راحت تره چون شناسه به صورت منحصر به فرد است.
نکته اضافی: در حال حاضر گیت به دلیل نگرانی های امنیتی در حال انتقال به هش SHA-256 است ولی به صورت کامل نمیتواند SHA-1 را حذف کند چون خیلی از مخازن و ابزارها بهش متکی هستن، برای اطلاعات بیشتر مستندات گیت را مطالعه کنید.
گیت هاب (GitHub) چیست؟
گیتهاب (GitHub) یک پلتفرم مبتنی بر وب است که برای میزبانی مخازن گیت (Git Repository) طراحی شده. مزیت استفاده از گیت هاب اینه که به توسعه دهنده ها جایی برای ذخیره کدهاشون میده (به صورت رایگان) و همچنین میتونن با بقیه هم پروژه هاشون رو به اشتراک بزارن و به صورت تیمی کار کنن (میشه پروژه به صورت Private هم باشه).
علاوه بر نگهداری کدها گیت هاب با داشتن قابلیت هایی مثل issue tracking و یا pull requests مدیریت پروژه جذاب تر میکنه و همکاری رو بین اعضای تیم راحت تر میکنه.
تفاوت گیت هاب (GitHub) گیت (Git)
برای اینکه راحت تر تفاوت رو درک کنید از چند منظور اون ها رو مقایسه میکنیم:
1. ماهیت و عملکرد
- گیت: یک نرم افزار برای کنترل ورژن و نگهداری تغییرات کد
- گیتهاب: یک پلتفرم آنلاین تحت وب است که از گیت برای پایه و اساس خودش استفاده میکنه
2. محل استفاده
- گیت: به صورت لوکال روی سیستم شما کار میکنه و الزاما برای استفاده نیاز به اینترنت نداره (نه برای همه دستور ها)
- گیتهاب: برای استفاده نیاز به اینترنت دارد و باید از طرق مرورگر و یا برنامه های دسکتاپی از اون استفاده کرد
3. وابستگی
- گیت: برای استفاده از گیت اجباری برای استفاده از گیتهاب ندارید مثلا میتونید برای مدیریت پروژه های لوکال خودتون از گیت استفاده کنید بدون اینکه اون رو در گیتهاب قرار بدید
- گیتهاب: نمیشه با GitHub بدون git کار کرد چون از گیت به عنوان فناوری زیربنایی استفاده کرده
نتیجه گیری
توی این مقاله سعی کردم یه زبان ساده git رو به جا بندازم و مثال های ساده ای برای استفادش بهتون بگم که دید کلی از نحوه استفاده از گیت برای شما ایجاد بشه.
پیشنهاد میشه که اگر قصد استخدامی، ورود به تیم های برنامه نویسی یا حتی فریلنسری یا... ، حتما یادگیری Git رو جدی بگیرید چون گیت الان دیگه از واجبات برنامه نویسی شده.
الان بیشتر از 6 ساله که مشغول برنامه نویسی وب هستم و در طول این مدت کلی چالش رو پشت سر گذاشتم و عاشق اینم که هر چیزی رو که در این مدت یاد گرفتم رو به بقیه هم یاد بدم، الانم در بستر سایت گیک باز دارم دانشم رو با بقیه تقسیم میکنم :)