توی این مطلب قراره درباره مزایای استفاده از گیت صحبت کنیم و اینکه چقدر استفاده اش باعث کم شدن مشکلات کد نویسی گروهی میشه . میشه گفت که یادگیری طرز کار و استفاده از گیت برای برنامه نویسا واجب هم هست .
تا حالا شده روی یه پروژه کار کنین و چند بار فایل های نسخه نهایی ۱ و نسخه نهایی ۲ و… درست کرده باشین و یا اگه تا حالا همچین تجربه ای نداشتین بدونین که این کار خیلی اذیت کننده ای است و گیت دقیقا برای رهایی از این هرج و مرج ساخته شده. بیاین یکمی به نحوه به وجود آمدن گیت بپردازیم :
تاریخچه به وجود آمدن گیت
گیت رو لینوس توروالدز ( همون خالق لینوکس) سال ۲۰۰۵ ساخت . می خواست ابزاری داشته باشه که :
- خیلی سریع باشه
- از ساختار غیر متمرکز پشتیبانی کنه
- جلوی خراب شدن تاریخچه پروژه رو بگیره
و خب همونطور که میدونین نتیجه شد گیت ؛ سیستمی که امروز قلب تپنده توسعه نرم افزار های بزرگ و کوچک جهان است و خب میتونین تصور کنین با این میزان از گستردگی استفاده ازش پس یادگیری اون هم برای برنامه نویسا چرا واجبه !
مفاهیم پایه گیت
یه سری از مفاهیم هستن که بهتره در همین ابتدای کار باهاشون آشنا بشیم که در ادامه بهتر موضوعات رو درک کنیم :
مخزن ( Repository)
فرض کن یه پوشه معمولی توی کامپیوترت داری . توش فایل های پروژه ات رو می ذاری . حالا اگه به این پوشه بگی « از امروز تحت نظارت گیت باش » گیت توی اون پوشه یه زیر پوشه مخفی به اسم .git درست میکنه . این زیر پوشه گل تاریخچه ، تنظیمات و اطلاعات نسخه بندی رو توی خودش نگه میداره .
به این پوشه ای که .git داره میگن مخزن محلی . هر تغییری که توی مخزن کامیت کنی (نگران نباش در ادامه کامیت رو توضیح میدم ) توی همون .git ذخیره میشه . خب یه نکته ای که اینجا وجود داره اینه که مخزن میتونه روی کامپیوتر خودت باشه (محلی ) یا روی یک سرور مثل گیت هاب . معمولا شما هم محلی کار می کنی و هر از گاهی با git push تغییرات رو به سرور میفرستی .
کامیت(commit)
کامیت یعنی یه «اسنپ شات» از همه فایل های مخزن توی یک لحظه خاص. فرض کنین داری یه نقاشی میکشی هر چند وقت یک بار از نقاشی عکس میگیری و خب این عکس ها بهت میگن که نقاشی توی اون لحظه چه شکلی بوده و اگه بعدا خواستی میتونی برگردی و هر جا رو که خراب کردی با توجه به اون عکسا اصلاح کنی .
ویژگی های هر کامیت :
- یه شناسه یکتا داره ( ۴۰ کاراکتری مثل a3b1f2و…)
- اسم و ایمیل کسی که کامیت رو انجام داده
- همراه با ساعت و تاریخ
- همراه با یک پیام توضیحی که خودت مینویسی
- و در آخر مشخص میکنه چه تفاوتی با کامیت قبلی داره
فکر کن دیشب کلی کد نوشتی ولی امروز میبینی برنامه ات کار نمیکنه اینجاست که به گیت میگی وضعیت دیشب رو بهم نشون بده و گیت دقیقا همون وضعیت رو برات برمیگردونه.
شاخه(Branch)
فرض کن داری یه داستان رو میخونی یا مینویسی شخصیت اصلی داستان میشه همون شاخه اصلی ما . فکر کرن یه ایده جدید اومد به ذهنت درباره کد و میخوای اینو امتحان کنی انگاری که یه شخصیت فرعی وارد داستان شده باشه بدون شاخه باید کد اصلیت رو تغییر بدی و اگر ایده ات جواب نداد برگردوندن کار سختیه . گیت اومده اینو هم راحت کرده توی گیت میزنی git branch idea-jadid و میری توی اون شاخه حالا هر چیزی رو دوست داری تغییر بده اگه ایده ات خوب بود که دمت گرم شاخه جدید رو با شاخه اصلی ترکیب میکنی اگه نه کل اون شاخه رو پاک میکنی و شاخه اصلی دست نخورده باقی میمونه . اگه هم تیمی دارین میتونین با همزمان روی چند تا شاخه کار کنین بدون اینگه مزاحم کار همدیگه بشین .
ادغام(Merge)
بعد از اینکه توی یه شاخه جداگانه کارت تموم شد و مطمئن شدی همه چی درست کار می کنه و میخوای تغییرات رو به شاخه اصلی ( یا هر شاخه دیگه ) اضافه کنی . به این عملیات میگن ادغام .
وقتی گیت دو تا شاخه رو ادغام میکنه :
- اگه تغییرات روی فایل های متفاوت باشه یا روی خطوط متفاوت از یه فایل باشه گیت خودکار همه چیز رو قاطی میکنه.
- اگر تغییرات روی فایل های متفاوت باشه یا روی خطوط متفاوت از یه فایل باشه گیت خودکار همه چیز رو قاطی میکنه.
- اگر هر دو شاخه رو یک فایل تغییرات متفاوتی داده باشن اینجاست که گیت میگه تداخل . اون وقت باید چیکار کرد هیچی شما تصمیم میگیری که دستی که کدوم تغییر رو نگه داری . بیاین براتون یه مثال بزنم . فرص کنید من و شما داریم روی شاخه اصلی یه فایل app.py داریم کار میکنیم شما توی شاخه اتون خط ۱۰ رو عوض کردید من توی شاخه خودم خط ۲۰ رو عوض کردم خب اینجا ادغام خودکار انجام میشه حالا اگه هر دوی ما خط ۱۰ رو عوض کنیم گیت اینجا میگه که تصمیم با ما هستش که کدوم رو انتخاب کنیم .
گیت به چه دردی میخوره ؟
کنترل نسخه
با گیت دیگه نیازی نیست بعد هر کاری که با کدت میکنی یه فایل داشته باشی هر تغییری که کامیت کنی تاریخچه اش ماندگار میشه و هر لحظه میتونی برگردی به وضعیت دقیق همون زمان .
همکاری تیمی بدون دغدغه
توی تیم هر کسی روی یه شاخه کار میکنه بعد از اتمام کار درخواست ادغام میده . بقیه کد رو بررسی میکنن و بعد ادغام میشه . دیگه خبری از اینکه وای کدمون خراب شد وای کدم پاک شد نیست .
آزمایش بدون ترس
می خوای یه ایده جدید رو پیاده کنی ؟ خب یه شاخه جدید میزنی و هر تغییری که خواستی رو انجام میدی اگه جواب نداد فداسرت کل شاخه رو دور بریز هیچ اثری روی شاخه اصلی نمیزاره پس با خیال راحت امتحان کن ایده هات رو .
بکاپ(Backup) خودکار و ابری
با git push کدت رو به گیت هاب یا سرور دیگه میفرستی . اگه لپ تاپت حتی بسوزه هم فقط کافیه git clone کنی تا همه چیز برگرده خدایی دیگه چی میخوای ؟!
در آخر اینو اضافه کنم که من هنوز خودم با گیت کار نکردم و تمام این اطلاعاتی که در اینجا نوشتم با تحقیق و ذوقی که برای یادگیری داشتم جمع آوری کردم و اینجا درجش کردم در آینده که با این ابزار کار کنم و تجربه بیشتری کسب کنم شاید ورژن دو این نوشته رو نوشتم .
ممنونم که تا آخر همراهم بودین امیدوارم اطلاعات خوبی رو در اختیارتون قرار داده باشم .