مدل Git Flow
این سند، استاندارد Git Flow مورد استفاده در پروژههای شرکت را تشریح میکند. هدف از این ساختار، ایجاد فرآیندی یکپارچه برای توسعه، بازبینی فنی، تضمین کیفیت (QA) و انتشار نسخهها است تا تمامی تیمها از یک الگوی مشترک پیروی کنند.
این مدل بر پایه استفاده از محیط Stage به عنوان مرجع تست و اعتبارسنجی پیش از انتشار در محیط Production طراحی شده است.
اصول کلی
در این ساختار، هر Branch مسئولیت مشخصی در چرخه توسعه نرمافزار دارد.
mainتنها مرجع نسخههای منتشرشده در Production است.developنماینده آخرین نسخه قابل استقرار در Stage و مبنای توسعه قابلیتهای جدید محسوب میشود.
ارتباط با CI/CD
فرآیند استقرار (Deployment) به صورت خودکار و بر اساس Branch مقصد انجام میشود.
| Branch | محیط استقرار |
|---|---|
develop | Stage |
main | Production |
بنابراین:
- هر Push یا Merge به
developباعث استقرار خودکار روی Stage خواهد شد. - هر Merge به
mainباعث استقرار خودکار روی Production خواهد شد.
ساختار Branchها
main
Branch اصلی پروژه که همواره نماینده نسخه در حال اجرای Production است.
ویژگیها:
- فقط شامل نسخههای منتشرشده است.
- هر Commit باید معادل یک نسخه قابل انتشار باشد.
- تنها از طریق Merge Request مربوط به
releaseیاhotfixبهروزرسانی میشود. - انجام Commit مستقیم روی این Branch مجاز نیست.
develop
Branch اصلی توسعه که تمامی تغییرات قبل از انتشار در آن تجمیع میشوند.
ویژگیها:
- مبنای ایجاد تمامی Featureها است.
- محیط Integration تیم محسوب میشود.
- هر تغییر پس از Merge به صورت خودکار روی Stage مستقر خواهد شد.
- نسخه موجود روی Stage همواره از این Branch ایجاد میشود.
Working Branch
ساختار نامگذاری:
<JIRA-KEY>
نمونه:
ZIRSAKHT-241
ویژگیها:
- از Branch
developایجاد میشود. - تنها برای پیادهسازی یک Task یا Issue استفاده میشود.
- مستقیماً به
developMerge میشود. - پس از Merge، به صورت خودکار روی Stage مستقر خواهد شد.
- پس از اتمام کار حذف میشود.
- نام Branch باید دقیقاً برابر با Jira Issue Key باشد.
هر Working Branch تنها باید خروجی یک Merge Request داشته باشد.
Release Branch (اختیاری)
ساختار نامگذاری:
release/<version>
نمونه:
release/1.8.0
این Branch برای پروژههایی استفاده میشود که قبل از انتشار نهایی، نیاز به مرحله تثبیت (Stabilization) دارند.
ویژگیها:
- از
developایجاد میشود. - صرفاً برای رفع اشکالات نسخه (Bug Fix) استفاده میشود.
- افزودن قابلیت جدید (Feature) در این مرحله مجاز نیست.
پس از آماده شدن نسخه:
- در
mainMerge میشود تا نسخه منتشر گردد. - سپس مجدداً در
developMerge میشود تا تغییرات همگامسازی شوند.
Hotfix Branch
ساختار نامگذاری:
<JIRA-KEY>
نمونه:
HAMYAR-145
برای رفع سریع مشکلات بحرانی در محیط Production استفاده میشود.
ویژگیها:
- مستقیماً از
mainایجاد میشود. - فقط برای رفع خطاهای بحرانی Production استفاده میشود.
- پس از تأیید، مستقیماً در
mainMerge و منتشر میشود. - نام Branch باید برابر Jira Issue Key همان مشکل باشد.
پس از انتشار، تغییرات باید در develop نیز Merge شوند تا در نسخههای آینده حفظ شوند.
فرآیند توسعه
توسعه Feature
مراحل توسعه یک قابلیت جدید به صورت زیر انجام میشود:
develop
│
▼
ZIRSAKHT-241
│
▼
Merge Request
│
▼
Technical Review
│
▼
develop
│
▼
Auto Deploy (Stage)
│
▼
QA
پس از Merge شدن Feature در develop، نسخه جدید به صورت خودکار روی Stage مستقر شده و برای بررسی تیم QA در دسترس قرار میگیرد.
فرآیند Technical Review و QA
ترتیب انجام فرآیندها به صورت زیر است:
- ایجاد Merge Request
- انجام Technical Review و دریافت تأییدیه
- Merge در
develop - استقرار خودکار روی Stage
- انجام تست توسط تیم QA
بنابراین، بررسی فنی همواره قبل از استقرار در محیط Stage انجام میشود.
فرآیند انتشار
انتشار مستقیم
در پروژههایی که نیاز به Release Branch ندارند:
develop
│
▼
main
انتشار با Release Branch
در پروژههایی که مرحله تثبیت نسخه دارند:
develop
│
▼
release
│
▼
main
فرآیند Hotfix
main
│
▼
HAMYAR-145
│
▼
main
│
└────────► Production
│
▼
develop
قوانین
موارد غیرمجاز
- Commit مستقیم روی
main - افزودن Feature جدید در
release - ایجاد Working Branch از هر Branch غیر از
develop - ایجاد Hotfix از هر Branch غیر از
main
الزامات
- تمامی Featureها باید ابتدا روی Stage مورد بررسی قرار گیرند.
- Merge به
mainتنها پس از تأیید Technical Review و QA مجاز است. - هر Working Branch باید فقط به یک Jira Issue اختصاص داشته باشد.
- تمامی تغییرات Production باید در نهایت در
developنیز همگامسازی شوند.
جمعبندی
رعایت این Git Flow باعث ایجاد فرآیندی استاندارد، قابل پیشبینی و کنترلشده برای توسعه و انتشار نرمافزار خواهد شد.
اجرای صحیح این مدل مستلزم فراهم بودن شرایط زیر است:
- استقرار سریع و پایدار روی Stage
- انجام منظم فرآیند QA
- انجام Technical Review پیش از Merge
- کنترل کامل فرآیند انتشار در Branch
main
در صورت عدم رعایت این فرآیندها، احتمال انتشار تغییرات تأییدنشده و بروز خطا در محیط Production به شکل قابل توجهی افزایش خواهد یافت.