استراتژی مناسب گیت

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

به نظرتون بهترین روش برای مدیریت برنچ هامون چیه؟‌
تیم های بزرگ از چه روشی برای مدیریت برنچ هاشون استفاده می‌کنن که کمترین کانفلیکت به وجود بیاد؟‌

استراتژی مناسب گیت
استراتژی مناسب گیت


بهترین استراتژی مدیریت برنچ ها که برای استفاده از گیت توصیه میشه به این شکل هست:

۱- برنچ اصلی با نام master

۲- برنچ اصلی توسعه با نام develop (فقط یک برنچ)

۳- برنچ های توسعه با پیش وند feature (به هر تعداد که لازم باشه)

۴- برنچ توسعه اضطراری hotfix (که به نسبت بقیه برنچ ها کمتر استفاده میشه)

۵- برنچ انتشار realse


به شکل زیر دقت کنید:

انواع شاخه های اصلی گیت
انواع شاخه های اصلی گیت


بریم برنچ های پرکاربرد شکل بالا رو بررسی کنیم:

برنج اصلی master

فرض کنید که کدهای سایت ویرگول روی ورژن کنترل گیت قرار گرفته. همون کدی که دقیقا الان در حال اجراست و روی اینترنت در دسترس همگان هست روی این برنچ قرار گرفته.

هیچ برنامه نویسی حق کامیت و پوش کردن مستقیم روی این برنچ رو نداره ! و همون طور هم که انتظار میره از این برنچ فقط یکی در کل پروژه داریم و کسی نباید اسم اون رو تغییر بده و یا اینکه برنچ دیگه ای با همین اسم بسازه.

برنچ مستر به صورت پیش فرض موقع مقدار دهی اولیه گیت ، توسط خود گیت ساخته میشه !

برنچ توسعه develop

بعد از برنچ اصلی master برنچ develop حائز اهمیت هست. کار این برنچ در واقع نگهداری کدهای جدید و اضافه کردنش به master هست.

فرض کنید شما پروژه ویرگول رو به جایی رسوندین که اجرایی شده و کدهاتون رو روی سرور قرار دادین ( به اصطلاح بالا بردید) حالا مدیر تیم فنی باگ ها و فیچر های جدیدی که لازم هست اضافه بشه رو به تیم فنی اعلام می‌کنه . خوب قرار نیست هر کاری که می‌کنیم و هر کامیتی که می‌کنیم به سرعت روی سرور اصلی قرار بدیم. برای اینکه با برنچ develop بیشتر آشنا بشید باید برنچ ویژگی ها feature رو هم مطالعه کنید. ادامه مثالی که زدم اونجاست!

برنچ ویژگی‌ها feature

خوب تو مثالی که تو برنچ develop زدم لازم هست که یک سری باگ ها اصلاح بشه و یا اینکه ویژگی های جدیدی به پروژه اضافه بشه.‌ اینجاست که باید از برنچ develop یه برنچ دیگه به اسم feature ساخت و اونجا کارهای لازم رو انجام داد. بعد از اینکه کارمون تو برنچ feature تموم شد و کامیت های مناسب رو نوشتیم حالا برنچ feature رو با برنچ develop  مرج می‌کنیم!

خیلی از شرکت ها این کارو می‌کنن و خیلی های دیگه یک نفر مسئول گیت (system owner) دارند و شما به جای اینکه merge کنید‌، باید merge request بدید و کدتون رو push کنید تا بعد از بررسی و review اون رو روی develop مرج کنه!

خوب فرض کنید که تو یک هفته و با کار هم تیمی هاتون ۱۰ تا فیچر مختلف رو تموم کردید و کلی باگ هم فیکس کردین. حالا مدیر فنی تصمیم می‌گیره که تغییرات جدید رو به سرور اصلی اضافه کنه و به اصطلاح کدها رو بالا ببره!

خوب میاد برنچ develop رو با برنچ master مرج می‌کنه و همه تغییرات جدید رو به برنچ اصلی master انتقال میده !‌ (در صورتی که برنچ realese وجود نداشته باشه)

در این لحظه برنچ develop و مستر باهم یکی هستند !

ابزار گیت
ابزار گیت



فرض کنید که شما بخواهید از برنچ develop یک برنچ ویژگی ( مثلا fixTypo )‌ بسازید و بعد از اینکه کارتون تموم شد اون رو با برنچ develop مرج کنید.
مراحلی که باید انجامش بدیم ( با فرض اینکه الان توی برنچ develop هستید):

۱- ساختن یک برنچ جدید مثلا feature/fixTypo
۲- انجام تغییرات لازم در کدها
۳- چک اوت به برنچ develop
۴- مرج کردن برنچ feature/fixTypo با develop
۵- پوش کردن برنچ develop
۶ـ حذف کردن برنچ feature/fixTypo

خوب برای اینکه راحت تر بتونیم از روش مدیریت برنچ ها در گیت استفاده کنیم، ابزاری بسیار کارآمد به اسم گیت فلو وجود داره که کار رو برای ما ساده تر هم می‌کنه !

https://virgool.io/@novonimo/مکمل-قردتمند-گیت-git-flow-ufhgxx6j6ah3

ابزار قدرتمند گیت فلو به سادگی روی ترمینال شما نصب میشه و با اضافه شدن به گیت مراحل بالارو به این شکل انجام میده:

۱- ساختن یک برنچ ویژگی جدید
۲- انجام تغییرات لازم در کدها
۳- فینش کردن برنچ ویژگی جدید
۴- پوش کردن برنچ develop

درسته که به لحاظ تعداد مراحل فقط ۲ مرحله کم شده ولی به نوع دستورات دقت کنید. در سناریو معمولی گیت:

git branch -b feature/fixTypo
** do some changes on code base **
git checkout develop
git merge develop feature/fixTypo
git push origin develop
git branch -D feature/fixTypo

با استفاده از گیت فلو:

git flow feature start fixTypo
** do some changes on code base **
git flow feature finish fixTypo
git push origin develop

خیلی ساده شد، نه ؟‌


سایر مقاله های من در ویرگول:

https://virgool.io/programmers-revolution/بهترین-تمرین-های-گیت-wgjeggzbq1gj
http://vrgl.ir/4ip6V

Contact With me:
https://t.me/nimamohamadian
https://www.facebook.com/nimamohamadian89
https://twitter.com/Nima_Mohamadian
https://www.linkedin.com/in/nima-mohamadian-57ba63123