گاهی وقتا به عنوان یه نویسنده ، طراح سناریو ، فیلمنامه و یا نمایشنامه نویس، خبرنگار ، برنامه نویس(که البته این مورد بیشتر مد نظر منه)، طراح پروژه و یا شغل هایی از این دست که معمولا کارهایی که انجام میدن دستخوش تغییرات و ویرایش های متعدد میشه برامون پیش میاد که روی یه فایلی و یا پروژه ای بیشتر از یک نفر کار و فعالیت کنن و گاها مدام و یا کم و بیش اونو ویرایش و اصلاحات لازم رو توش انجام بدن اینجاست که قاعدتا یه مشکلی بزرگی برامون بوجود میاد و اونم بخاطر سپاری و یا کنترل کردن لیست تغییراتیه که روی کار یا پروژه انجام میشه و اینکه کدوم تغییرات درست و یا کدوم غلط بوده.
* یه سناریو ساده :
فرض کنید شما و همکلاسی تون که ترم آخر مهندسی نرم افزار هستین مخ استادتون رو زدین که بتونین دو نفری روی یه پایان نامه با موضوع x کار کنین و اونم موافقت کرده. شروع می کنید تحقیق و نوشتن. شما شخص A و دوستتون هم شخص B هستین. اتفاقی که میوفته اینه که بعد از کمی کار روی پایان نامه اونو توی یه (1)new folder ذخیره می کنین و یه خورده روی پروژه کار می کنین و شخص B میاد یه سری تغییرات میده و اونو میریزه توی (2)new folder و شما اونو بازبینی می کنید و میبینید که دوستتون که شخص B باشه یه سری جاها رو درست رفته و یه سری جاها رو اشتباه رفته و میاین اصلاح می کنین و میریزین توی (3)new folder و همینطور تعداد دفعات ویرایش و اصلاح ممکنه n بار ادامه پیدا کنه...حالا از کجا می خواین متوجه بشین که توی کدوم مرحله چه اتفاقی افتاده ؟؟ خب شاید بگین که بله خب دونه دونه new folder ها رو میبینیم و تغییرات توی نسخه های مختلف رو چک می کنیم و با نسخه های قبلی یا بعدی مقایسه می کنیم ولی اگه فایلتون 500 صفحه باشه چی ؟؟....اولا اینکه این کار خطای زیادی داره چون ممکنه حتی بعد از ویرایش نسخه های قبلی و بازبینی بازم بعدا متوجه اشتباهی بشین و بخواین نسخه بازبینی شده رو هم دوباره بازبینی کنین و این وسط ممکنه دوستتون برگرده بگه که من نسخه موجود توی (2)new folder رو مثلا باید یه قسمتی ازش رو بذارم توی یه قسمتی از پروژه که اینجوری دیگه میشه آش شله قلمکار !!! یا مثلا فرض کنید شما و دوستتون دارین هر دو روی یه قسمتی از پروژه کار می کنید و هر کدوم توی یه شهر جدا هستین و مجبورین همه اش به هم پیام بدین که من روی فلان قسمت کار کردم و تو دیگه کار نکن یا مثلا من اینو انجام ندادم و اینجوری هم یا دوباره کاری زیاد پیش میاد یا اینکه همون ضرب المثل آشپز دوتا میشه اتفاق میوفته !!!
گیت چیه ؟
اینجاست که Git به کمک ما میاد و Distributed Version Control مفهوم پیدا می کنه. اصولا Distributed ها ایده طراحی و شکل گیریشون این بوده و درست شدن که دو یا چند یا n نفر بتونن همزمان و یا غیر همزمان روی یه پروژه و یا هدفی کار کنن بدون اینکه نیاز به هماهنگی متسمر و پیچیده با هم داشته باشن و کمترین برخورد و تصادم رو با هم داشته باشن.گیت رو اصولا یه نرم افزار کنترل نسخه میدونن که جزء نرم افزار های آزاد و متن باز به حساب میاد.
گیت یک نوع سیستم کنترل ورژن (VCS) است که با آن میتوانید تغییرات اعمال شده در فایلها را سادهتر پیگیری کنید. مثلاً، اگر فایلی را ویرایش کنید، گیت میتواند دقیقاً به شما بگوید که چه چیزی تغییر کرده است، چه کسی آن را تغییر داده است و دلیلِ این تغییر چه بوده است.
نحوه کارکرد گیت چطوریه ؟؟
اگه بخوام نحوه کارکرد و مدل عملکرد Git رو براتون توضیح بدم باید بگم که اولا Git یه نرم افزاره و قراره کار ما رو با ایده و عملکرد بینظریش راحت تر کنه. عموما هر جا که حرف از Git میشه یاد مفهوم Version Control یا نرم افزاری برای کنترل نسخه میوفتیم که کارش اینه که از فایل ها محتوای های ما نسخه های متعدد با توجه به تغییرات ما تولید کنه.
مثالی ساده جهت توضیح عملکرد Git:
فرض کنید توی شرکتی به عنوان برنامه نویس مشغول هستین. شروع می کنید به کد زدن و تصمیم میگیرین نسخه 1 از فایل تون رو commit کنین بعد ادامه میدین و یه سری تغییرات میدین و میرسین به نسخه 2 و اونم commit می کنین در حین اینکه در حال کار بر روی ورژن 3 هستین متوجه میشین که نسخه جاری تون که همون 2 باشه یه باگی داره و باید برین و تغییراتی که از ورژن 1 به 2 دادین رو مرور کنین چون قاعدتا طبیعیه که یادتون نباشه که چه تغییری دادین و کجا بوده و برای چی بوده که این کار با ورژن کنترل ها که خفن ترین اونها فعلا Git هست به سادگی امکان پذیره و هر زمانی که اراده کنین میتونین از نسخه n ام به نسخه n ام برگردین بدون اینکه دغدغه ای داشته باشین که چیزی رو از دست داده باشین..توی ورژن کنترل ها زمان دقیق آخرین commit و حتی شخصی که آخرین بار یا n امین بار روی هر فایلی که داشته کار می کرده و یا هر تغییری که داده مشخصه...(بررسی امکانات Git و یا ورژن کنترل های مشابه رو اینجا نمی خوام مطرح کنم)گیت به ما اجازه مقایسه بین نسخه های مختلف رو میده و همچنین میتونیم بین نسخه های موجود رفت و آمد کنیم و هر نسخه های رو که خواستیم به عنوان نسخه فعلی مون داشته باشیم که همون طور که گفته شد به اون VCS یا Version Control System (سیستم کنترل نسخه)میگن.
دنیای امروز و Git :
امروزه دیگه از یه برنامه نویس نرم افزار چه Desktop کار باشه چه وب کار، چه Back-End کار باشه و چه Front-End کار و یا حتی FullStack-Developer فارغ از زبون برنامه نویسی که داره باهاش کد می زنه انتظار میره که Git بلد باشه و یا حداقل بتونه اصول اولیه و مفاهیم اونو بدونه و بتونه پروژه ای روی GitHub.com و یا GitLab.com داشته باشه و کار خودش رو از این طریق به دیگران نشون بده(برنامه نویسای با کلاس رزومه شون رو روی GitHub به بقیه نشون میدن).خیلی ها گیت رو با گیت هاب یکی میدونن و باید بگم که GitHub.com یک سایت هاست (Host) برای پروژههاست که از گیت استفاده میکنه و میتونم بگم بیشتر از 10 سایت مشابه برای اینکار هست که 2 تا معروف ترین هاشون اول GitHub.com و بعد GitLab.com هست.
سخن آخر :
گیت (Git) الزاما به نرم افزار ربطی نداره(البته معمولا نرم افزار کارا باهاش کار می کنن) و میتونه توی خیلی از ضمینه های کاری به دردتون بخوره و به کارها و سناریو ها و پرژه هاتون سلسله مراتب و جامعیت بده اگر علاقه دارین تا بیشتر با Git و دنیای اون آشنا بشین توی گوگل اونو سرچ کنید و یه دنیا مطلب و حرف در موردش پیدا کنید و یا به کانال تلگرامیه من آموزش Git سر بزنید.