استراتژیهای انشعاب Git – انجمن DEV

استراتژی های انشعاب Git تکنیک هایی برای سازماندهی و مدیریت توسعه ویژگی، همکاری و کنترل نسخه در یک پروژه هستند. انتخاب استراتژی مناسب به اندازه تیم، نیازهای پروژه و نیازهای استقرار بستگی دارد. در زیر متداول ترین استراتژی های انشعاب Git آورده شده است:
1. Git Flow
یک استراتژی قوی و محبوب برای پروژه هایی با چرخه های انتشار برنامه ریزی شده.
شاخه ها:
- اصلی (استاد): حاوی کد پایدار و آماده تولید است.
- توسعه دهید: به عنوان شاخه یکپارچه سازی ویژگی ها عمل می کند. این جایی است که نسخه بعدی آماده می شود.
-
شاخه های ویژه: ایجاد شده برای ویژگی ها یا وظایف فردی، منشعب شده است
develop
. -
شعبه ها را آزاد کنید: ایجاد شده برای آماده شدن برای انتشار، منشعب شده است
develop
. -
شعبه های رفع فوری: برای رفع مشکلات حیاتی در تولید، منشعب شده استفاده می شود
main
.
جریان:
- شاخه های ویژگی در ادغام می شوند
develop
پس از اتمام. - چه زمانی
develop
پایدار است، یک شاخه انتشار ایجاد می شود، آزمایش می شود و در آن ادغام می شودmain
. - رفع بحرانی از طریق شاخه های رفع فوری به طور مستقیم بر روی اعمال می شود
main
و backport بهdevelop
.
موارد استفاده:
- پروژه هایی با انتشار برنامه ریزی شده
- پروژه های پیچیده با توسعه دهندگان متعدد.
2. GitHub Flow
یک مدل انشعاب ساده تر که معمولاً برای استقرار مداوم استفاده می شود.
شاخه ها:
- اصلی: تنها شعبه دائمی که حاوی کد آماده تولید است.
-
شاخه های ویژه: ایجاد شده برای ویژگی های فردی یا رفع اشکال، منشعب شده است
main
.
جریان:
- روی شاخه ویژگی کار کنید.
- هنگامی که آماده ادغام هستید، درخواست کشش (PR) را باز کنید
main
. - پس از بررسی کد و بررسی CI/CD، شاخه ویژگی را در آن ادغام کنید
main
. - مستقر مستقیم از
main
.
موارد استفاده:
- تیم های کوچک.
- پروژه هایی که مستلزم استقرار مکرر هستند.
3. GitLab Flow
یک استراتژی انعطاف پذیر که عناصر Git Flow و GitHub Flow را ترکیب می کند. با خطوط لوله CI/CD به خوبی کار می کند.
شاخه ها:
- اصلی (یا تولید): کد پایدار، آماده تولید.
-
شاخه های خاص محیط زیست: شاخه های اختیاری مانند
staging
یاpre-production
. -
شاخه های ویژه: برای ویژگی های جدید یا رفع اشکال، منشعب شده است
main
.
جریان:
- توسعه ویژگی ها در شاخه های ویژگی.
- ادغام تغییرات در شاخه محیط مناسب (به عنوان مثال،
staging
برای آزمایش). - استقرار از شاخه محیط زیست تا تولید.
موارد استفاده:
- تیم هایی با محیط های متعدد (به عنوان مثال، توسعه دهنده، مرحله بندی، تولید).
- پروژه هایی که نیاز به استقرار دستی یا مرحله ای دارند.
4. توسعه مبتنی بر تنه
یک استراتژی مینیمالیستی با تاکید بر سادگی و یکپارچگی سریع.
شاخه ها:
- اصلی (تنه): تنها شاخه با عمر طولانی.
- شاخه های ویژه کوتاه مدت: شاخه های اختیاری برای ویژگی های جدید، که اغلب ظرف چند ساعت یا چند روز ادغام می شوند.
جریان:
- توسعه دهندگان به طور مستقیم متعهد می شوند
main
یا از شاخه های کوتاه مدت استفاده کنید. - از تست خودکار برای اطمینان از ثبات استفاده کنید.
- ادغام های مکرر شاخه تنه را به روز نگه می دارد.
موارد استفاده:
- تیم های چابک در حال تمرین یکپارچه سازی مداوم (CI).
- پروژه هایی با چرخه توسعه سریع.
5. جریان را آزاد کنید
یک استراتژی انشعاب مبتنی بر مایکروسافت که برای انتشار نرم افزار در مقیاس بزرگ طراحی شده است.
شاخه ها:
- اصلی: شاخه پایدار برای تولید.
- شاخه های ویژه: برای توسعه ویژگی.
- شعبه ها را آزاد کنید: برای تهیه و تثبیت رهاسازی خاص استفاده می شود.
جریان:
- روی ویژگی ها در شاخه های ویژگی کار کنید.
- ادغام ویژگی های تکمیل شده در
main
. - برای آزمایش نهایی، تثبیت و استقرار یک شاخه انتشار ایجاد کنید.
موارد استفاده:
- پروژه های سازمانی با برنامه های دقیق انتشار.
جدول مقایسه استراتژی ها
استراتژی | پیچیدگی | فرکانس استقرار | ایده آل برای |
---|---|---|---|
Git Flow | بالا | برنامه ریزی شده است | تیم های پیچیده و بزرگ |
GitHub Flow | کم | مستمر | تیم های ساده و کوچک |
جریان GitLab | متوسط | انعطاف پذیر | تیم هایی با محیط |
توسعه مبتنی بر تنه | کم | مستمر | تیم های چابک و سریع |
جریان آزادسازی | متوسط | برنامه ریزی شده است | پروژه های سازمانی |
بهترین روش ها برای انشعاب
-
از نام های شعب توصیفی استفاده کنید: از نام هایی مانند استفاده کنید
feature/login
،bugfix/header-issue
، یاhotfix/payment-fix
برای وضوح - بررسی کد: همیشه از درخواست های کشش/ادغام برای اطمینان از کیفیت کد و حفظ همکاری استفاده کنید.
- تست خودکار: خطوط لوله CI/CD را برای آزمایش و اعتبارسنجی خودکار تغییرات قبل از ادغام، یکپارچه کنید.
-
ادغام به طور منظم: شعب را به روز نگه دارید
main
برای جلوگیری از تضادهای بزرگ و پیچیده ادغام. - شاخه های قدیمی را حذف کنید: پس از ادغام شاخه ها را حذف کنید تا مخزن تمیز بماند.
وظیفه: یک استراتژی انشعاب برای پروژه های تیم خود ایجاد کنید.
در اینجا یک پیشنهاد است استراتژی انشعاب برای پروژه های تیم شما، طراحی شده برای ایجاد تعادل بین کارایی، همکاری و ثبات کد. این استراتژی فرض میکند که تیم شما در یک محیط Agile کار میکند و مرتباً بهروزرسانیها را ارائه میکند.
مروری بر استراتژی انشعاب
ما ترکیبی از GitLab Flow و توسعه مبتنی بر تنه، برای نیازهای تیم طراحی شده است. این رویکرد با خطوط لوله CI/CD و محیط های متعدد (مانند توسعه، مرحله بندی و تولید) به خوبی کار می کند.
شاخه ها
-
main
(یاproduction
):- همیشه حاوی کد پایدار و آماده تولید است.
- برای استقرار در تولید استفاده می شود.
- شاخه محافظت شده: فقط درخواست های کششی (PRs) می توانند در آن ادغام شوند
main
، نیاز به تأییدیه ها و بررسی های CI.
-
develop
(اختیاری در صورت نیاز به یک شاخه یکپارچه سازی اختصاصی):- برای ادغام ویژگی های تکمیل شده و آزمایش آنها قبل از رفتن به استفاده می شود
main
. - برای تیم هایی که مرحله مرحله قبل از تولید را ترجیح می دهند.
- برای ادغام ویژگی های تکمیل شده و آزمایش آنها قبل از رفتن به استفاده می شود
-
شاخه های ویژه:
- برای توسعه ویژگیهای جدید، پیشرفتها یا رفع اشکال ایجاد شده است.
- قرارداد نامگذاری:
feature/
یاbugfix/
. - ادغام شد
main
یاdevelop
پس از بررسی و تست کد
-
شعبه های رفع فوری:
- برای رفع مشکلات حیاتی در تولید استفاده می شود.
- قرارداد نامگذاری:
hotfix/
. - منشعب شد
main
و دوباره در هر دو ادغام شدmain
وdevelop
(یا شاخه های ویژگی مربوطه).
-
شاخه های محیط زیست (اختیاری):
- برای مدیریت محیط های خاص مانند
staging
یاqa
. -
staging
برای آزمایش تغییرات نهایی قبل از ادغام استفاده می شودmain
.
- برای مدیریت محیط های خاص مانند
جریان کار
توسعه ویژگی
- توسعه دهنده یک شعبه از
main
(یاdevelop
در صورت استفاده از adevelop
شاخه).
git checkout -b feature/ main
- برنامهنویس روی این ویژگی کار میکند، تغییراتی را انجام میدهد و به شاخه راه دور فشار میآورد.
git push origin feature/
- پس از تکمیل، یک درخواست کشش (PR) را باز کنید
main
یاdevelop
برای بررسی - پس از تایید و تست های موفقیت آمیز CI، شاخه ویژگی ادغام می شود.
- پس از ادغام، شاخه ویژگی را حذف کنید تا مخزن تمیز بماند.
منتشر می کند
- هنگامی که برای انتشار آماده شدید، یک شاخه انتشار ایجاد کنید (در صورت نیاز):
git checkout -b release/ develop
- آزمایش نهایی را روی شاخه انتشار انجام دهید.
- هر گونه اشکال را مستقیماً در شاخه انتشار برطرف کنید.
- شاخه انتشار را در ادغام کنید
main
و نسخه منتشر شده را تگ کنید:
git tag -a v1.0 -m "Release version 1.0"
git push origin --tags
- به صورت اختیاری، شاخه انتشار را دوباره در آن ادغام کنید
develop
برای به روز نگه داشتن آن
رفع فوری
- یک شاخه Hotfix ایجاد کنید
main
:
git checkout -b hotfix/ main
- مشکل را برطرف کنید و تغییرات را فشار دهید.
- شاخه Hotfix را در آن ادغام کنید
main
و استقرار به تولید:
git checkout main
git merge hotfix/
git push origin main
- بکپورت رفع مشکل به
develop
برای اطمینان از ثبات
کنوانسیون های نامگذاری
-
feature/
: ویژگی ها یا پیشرفت های جدید. -
bugfix/
: رفع اشکال غیر بحرانی. -
hotfix/
: رفع بحرانی برای مشکلات تولید. -
release/
: شاخه های مخصوص انتشار. -
staging
،qa
، یاdev
: شاخه های خاص محیط زیست.
ادغام CI/CD
-
تست خودکار:
- همه شاخه ها باید آزمایش های خودکار را در خطوط لوله CI/CD راه اندازی کنند.
- قبل از اجازه دادن به ادغام، از گذراندن تستها اطمینان حاصل کنید
main
یاdevelop
.
-
بررسی کد:
- به حداقل یک بازبین برای PR نیاز دارید.
- از ابزارهای بررسی کد برای حفظ کیفیت و اطمینان از رعایت استانداردهای کدنویسی استفاده کنید.
-
استقرار:
- استقرار خودکار
main
پس از گذراندن چک های CI/CD، به تولید تبدیل می شود. - مستقر کنید
staging
به یک محیط مرحلهبندی برای آزمایش منشعب شوید.
- استقرار خودکار
بهترین شیوه ها
- ادغام های کوچک و مکرر: تغییرات را به طور مکرر ادغام کنید تا از درگیری های بزرگ و پیچیده جلوگیری کنید.
-
اجرای شعبه های حفاظت شده: محافظت کنید
main
وdevelop
برای اطمینان از عدم تعهد مستقیم - شاخه های ادغام شده را حذف کنید: با حذف شاخه های ادغام شده، مخزن را تمیز نگه دارید.
- از Pull Requests استفاده کنید: همیشه PR برای بررسی و آزمایش کد ایجاد کنید.
- تغییرات سند: اسناد یا لاگ های تغییرات را به عنوان بخشی از فرآیند انتشار به روز کنید.
مثال گردش کار بصری
main
|
|--------- hotfix/
|
|--------- release/
| |
develop ------------|
| \-------- feature/
| \-------- bugfix/
|
یادگیری مبارک!!!