خیلی از ما تو پروژه هامون از سیستم ورژن کنترل - گیت - استفاده میکنیم. استفاده بهینه از هر ابزاری باعث کاهش خطا و همچنین افزایش کیفیت میشه. گیت هم یکی از پرکاربردترین ابزارهای توسعه دهندگان محسوب میشه. تو این نوشته در مورد یکی از روش های مرسوم مدیریت برنچ هامون صحبت میکنم.
به نظرتون بهترین روش برای مدیریت برنچ هامون چیه؟
تیم های بزرگ از چه روشی برای مدیریت برنچ هاشون استفاده میکنن که کمترین کانفلیکت به وجود بیاد؟
بهترین استراتژی مدیریت برنچ ها که برای استفاده از گیت توصیه میشه به این شکل هست:
۱- برنچ اصلی با نام master
۲- برنچ اصلی توسعه با نام develop (فقط یک برنچ)
۳- برنچ های توسعه با پیش وند feature (به هر تعداد که لازم باشه)
۴- برنچ توسعه اضطراری hotfix (که به نسبت بقیه برنچ ها کمتر استفاده میشه)
۵- برنچ انتشار realse
به شکل زیر دقت کنید:
بریم برنچ های پرکاربرد شکل بالا رو بررسی کنیم:
فرض کنید که کدهای سایت ویرگول روی ورژن کنترل گیت قرار گرفته. همون کدی که دقیقا الان در حال اجراست و روی اینترنت در دسترس همگان هست روی این برنچ قرار گرفته.
هیچ برنامه نویسی حق کامیت و پوش کردن مستقیم روی این برنچ رو نداره ! و همون طور هم که انتظار میره از این برنچ فقط یکی در کل پروژه داریم و کسی نباید اسم اون رو تغییر بده و یا اینکه برنچ دیگه ای با همین اسم بسازه.
برنچ مستر به صورت پیش فرض موقع مقدار دهی اولیه گیت ، توسط خود گیت ساخته میشه !
بعد از برنچ اصلی master برنچ develop حائز اهمیت هست. کار این برنچ در واقع نگهداری کدهای جدید و اضافه کردنش به master هست.
فرض کنید شما پروژه ویرگول رو به جایی رسوندین که اجرایی شده و کدهاتون رو روی سرور قرار دادین ( به اصطلاح بالا بردید) حالا مدیر تیم فنی باگ ها و فیچر های جدیدی که لازم هست اضافه بشه رو به تیم فنی اعلام میکنه . خوب قرار نیست هر کاری که میکنیم و هر کامیتی که میکنیم به سرعت روی سرور اصلی قرار بدیم. برای اینکه با برنچ develop بیشتر آشنا بشید باید برنچ ویژگی ها 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
خوب برای اینکه راحت تر بتونیم از روش مدیریت برنچ ها در گیت استفاده کنیم، ابزاری بسیار کارآمد به اسم گیت فلو وجود داره که کار رو برای ما ساده تر هم میکنه !
ابزار قدرتمند گیت فلو به سادگی روی ترمینال شما نصب میشه و با اضافه شدن به گیت مراحل بالارو به این شکل انجام میده:
۱- ساختن یک برنچ ویژگی جدید
۲- انجام تغییرات لازم در کدها
۳- فینش کردن برنچ ویژگی جدید
۴- پوش کردن برنچ 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
خیلی ساده شد، نه ؟
سایر مقاله های من در ویرگول:
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