معرفی یک مدل موفق برای سیستم شاخه‌بندی (branching) گیت

۲۱ شهریور ، ۱۳۹۶

سیستم شاخه‌بندی یا branching گیت، مکانیزم مفیدی برای توسعه قابلیت‌های مختلف، انجام بهتر کار تیمی و کاهش وابستگی و تضادهای بین کد افراد تیم می‌شود. در این مقاله، شما را با مدلی برای اعمال سیستم شاخه بندی آشنا می‌کنیم.

تصویر زیر یک نمای کلی از این سیستم را نشان می‌دهد:

در این سیستم ما دو شاخه اصلی و با چرخه زندگی نامحدود داریم، شاخه master و شاخه develop.

شاخه master شاخه‌ای است که به طور پیشفرض در گیت ایجاد می‌شود و ما از آن فقط برای نگه داشتن نسخه‌های پایدار(stable) پروژه استفاده می‌کنیم.

شاخه develop مورد استفاده ما برای توسعه می‌باشد و همیشه در آن آخرین تغییرات و توسعه‌های انجام شده روی پروژه را نگه می‌داریم. هر زمانی که کد ما به وضعیت پایدار و قابل انتشار رسید، شاخه develop را با شاخه master ادغام(merge) می‌کنیم. (نحوه ایجاد شاخه و جابه‌جا شدن بین شاخه های موجود و ادغام آن‌ها در ادامه مقاله به شکل مبسوط توضیح داده می‌شود.)

3 دسته شاخه دیگر نیز وجود دارد اما وجود آن‌ها دائمی نیست و پس از اتمام کار آن‌ها، با نگه داشتن تاریخچه به دو شاخه اصلی ادغام شده و سپس از سیستم حذف می‌شوند.

  • اولین دسته از این شاخه‌ها، شاخه‌های مربوط به یک ویژگی یا Feature Branches هستند. این شاخه‌ها به منظور اضافه کردن یک قابلیت به پروژه مان یه سیستم ما اضافه شده و توسعه آن قابلیت بر روی آن‌ها انجام می‌شود. سپس پس از اتمام کار آن‌ها را با شاخه develop ادغام می‌کنیم و سپس حذف می‌شوند.
  • گروه دوم شاخه‌های مربوط به انتشار یک نسخه پایدار از پروژه یا Release Branches هستند. پس از این که ما به وضعیت پایدار پروژه خود رسیدیم و می‌خواستیم ورژن جدیدی از آن را  معرفی کنیم، این شاخه ایجاد می‌شود و سپس روندی که برای ارائه یک ورژن جدید لازم است طی شود را روی این شاخه انجام می‌دهیم (مانند لاگ کردن تغییرات این ورژن برای نمایش به کاربر و یا ماژولار کردن ویژگی‌های جدید اضافه شده یا اعمال تنظیمات جدید) و سپس آن را با شاخه master ادغام می‌کنیم و سپس مانند دسته قبلی این شاخه نیز از سیستم حذف می‌شود.
  • گروه آخر شاخه‌های مربوط به اشکال زدایی سریع یا Hotfix Branches می‌باشند. پس از ارائه ورژن جدید ممکن است ایراداتی در برنامه پیدا شود و نیاز باشد به سرعت رفع گردند. در این صورت شاخه‌ای از این نوع ایجاد می‌کنیم و پس از دیباگ کردن و رفع مشکل آن را  با شاخه master و شاخه develop ادغام می‌کنیم و سپس این شاخه حذف می‌شود.

 

حال به سراغ معرفی دستورات لازم برای انجام این کار ها می‌رویم:

در ابتدا بد نیست بدانید که دستور زیر به شما نشان می‌دهد که هم اکنون چند شاخه در سیستم شما وجود دارد:

git branch

برای ایجاد یک شاخه جدید از دستور checkout گیت استفاده می‌کنیم برای مثال در کد زیر شاخه develop را ایجاد می‌کنیم:

git checkout -b develop

⟩⟩⟩ دقت کنید که آپشن -b برای ساخت شاخه استفاده می‌شود و پس از این که شاخه‌ای را ساختید دیگر نیازی به گذاشتن آن نیست.

برای رفتن به شاخه‌ای که در سیستم وجود دارد دستور بالا را بدون آپشن -b استفاده می‌کنیم.

حال برای ادغام یک شاخه در شاخه دیگر، ابتدا به شاخه مورد نظر می‌رویم، سپس از دستور merge گیت استفاده می‌کنیم. به عنوان مثال در کد زیر ابتدا از شاخه develop به master می‌رویم و سپس develop را با آن ادغام می‌کنیم:

git checkout master
git merge develop

 

حال با کمک این دستور ها کار با 3 نوع شاخه مان را تمرین می‌کنیم.

Feature Branches

  • خارج شده از شاخه: develop
  • شاخه ادغامی: develop
  • نام گذاری: نام ویژگی جدید

ایجاد شاخه:

git checkout -b my-feature

پس از اتمام کار:

بازگشت به شاخه develop

git checkout develop

ادغام با شاخه develop

git merge --no--ff my-feature

⟩⟩⟩ دقت کنید که آپشن --no--ff برای نگه داشتن تاریخچه داشتن شاخه به این اسم الزامی است.

حذف شاخه my-feature

git branch -d my-feature

 

Release Branches

  • خارج شده از شاخه: develop
  • شاخه ادغامی: develop و master
  • نام گذاری: release-*

ایجاد شاخه:

git checkout -b release-1.3

پس از اتمام کار:

بازگشت به شاخه master

git checkout master

ادغام با شاخه master

git merge --no--ff release-1.3

زدن برچسب ورژن

git tag -a 1.3

بازگشت به شاخه develop

git checkout develop

ادغام با شاخه develop

git merge --no--ff release-1.3

حذف شاخه my-feature

git branch -d release-1.3

 

Hotfix Branches

  • خارج شده از شاخه: master
  • شاخه ادغامی: develop و master
  • نام گذاری: hotfix-*

ایجاد شاخه:

git checkout -b hotfix-1.3.1

پس از اتمام کار:

بازگشت به شاخه master

git checkout master

ادغام با شاخه master

git merge --no--ff hotfix-1.3.1

زدن برچسب ورژن

git tag -a 1.3.1

بازگشت به شاخه develop

git checkout develop

ادغام با شاخه develop

git merge --no--ff hotfix-1.3.1

حذف شاخه my-feature

git branch -d hotfix-1.3.1

 

امیدوارم از این مقاله لذت برده باشید و و برای شما مفید بوده باشد. با تشکر از زمانی که برای مطالعه این مقاله گذاشتید :) 

نویسنده: دپارتمان نرم افزار هینزا

میانگین آرا:
96% (44 نفر)
رای دهید:
مقالات مرتبط
مشاهده بیشتر...