مهندسیِ گیت با GitFlow

فرق یک مهندس نرم افزار با یک "کد زدن" اینه که یه مهندس جریان توسعه محصول رو مهندسی می‌کنه و یک معماری زیبا از اون در میاره در صورتی که "کد زن" فقط و فقط کد میزنه ! امروز می‌خوام شما رو با GitFlow آشنا کنم ! روندی برای معماری بخشیدن به سیر توسعه با Git .

GitFlow
GitFlow

به تصویر بالا دقت کنید ، پیچیده است ؟ بله اما به پروژه شما نظم می‌بخشه ! GitFlow مجموعه ای از Branch هاست که هر Branch مختص کارِ خاصی ساخته شده ، وقتی شما یک پروژه رو ایجاد می‌کنید باید GitFlow مربوط بهش رو هم با توجه به ابزاری که استفاده می‌کنید (Gitlab و ...) ایجاد کنید .

دقت کنید که این قضیه برای تیم های بالای 2 3 نفره ، پس اگه کلا 2 نفر تو تیمتون دارید خیلی لازم نیست به خودتون دردسر بدید !

به ترتیب Branch ها رو مورد بررسی قرار میدیم :

Master

این Branch اصلی با یک Tag هست که مشخص کننده شماره نسخه شماست ، اون چیزی که قراره در Market بگذارید (مثلا کافه بازار) در این Branch قرار می‌گیره

Release

این Branch یک نسخه آماده است که Feature های مورد نظرتون توش اضافه شده و تست شده ، اگه باگی روی این Branch از سمت Tester ها پیدا شد روی همین Branch درست میشه نه اینکه از Branch دیگه Fork بزنیم (طبق عکس) ، وقتی Release به اتمام رسید Branch مربوطه اش از git پاک خواهد شد .

Develop

این Branch شامل کدهایی هست که از نظر توسعه کلی ممکنه کامل نباشن ولی از نظر Feature کاملن ، منظور اینه که Feature شماره 2 روی این نسخه درسته ولی برای رسیدنش به Release لازمه Feature شماره 1 و 3 هم اضافه بشن

Feature

ما به ازای هر Feature جدیدی که قراره اضافه کنیم یک Branch جدید از Develop میسازیم (Fork) و تا زمانی که اون Feature کامل نشده باشه ، commit ها رو روی این Branch انجام میدیم ، به محض اینکه مطمئن شدیم Feature کامله اون رو روی Develop میندازیم (merge) ، وقتی Feature به اتمام رسید Branch مربوطه اش از git پاک خواهد شد .

HotFix

این Branch شامل Fork هایی از Branch اصلی (Master) هست که تغییراتی که روش میدیم خیلی جزئیه ، مثلا یک tag قراره عوض بشه یا یه url رو عوض قراره بکنیم (خیلی خیلی کوچیکن تغییرات) ، و وقتی تموم شد باید روی Master انداخته بشه و همین طور روی Develop ، وقتی HotFix به اتمام رسید Branch مربوطه اش از git پاک خواهد شد .

برای پیاده سازی GitFlow خیلی راحت با همون Command های Git می‌تونید این کار رو انجام بدید ولی ابزاری به نام GitFlow Extension هم وجود داره که البته روی خود Git هست و نیازی به دانلود چیزی جدید ندارید ! کافیه به مسیر پروژه برید و git flow init رو اجرا کنید !

$ git flow init
Initialized empty Git repository in ~/project/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for &quotnext release&quot development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
$ git branch
* develop
master

لیستِ Command های مورد نیاز

وقتی بخواهیم یک Branch برای Feature ایجاد کنیم :

بدون گیت فلو :

git checkout develop
git checkout -b feature_branch

با گیت فلو :

git flow feature start feature_branch

وقتی Feature ما تمام میشه :

بدون گیت فلو اکستنشن :

git checkout develop
git merge feature_branch

با گیت فلو اکستنشن :

git flow feature finish feature_branch

وقتی میخوایم Develop رو به Release منتقل کنیم :

بدون گیت فلو اکستنشن :

git checkout develop
git checkout -b release/0.1.0

با گیت فلو اکستنشن :

$ git flow release start 0.1.0
Switched to a new branch 'release/0.1.0'

وقتی بخوایم Release رو به Master منتقل کنیم :

بدون گیت فلو اکستنشن :

git checkout master
git merge release/0.1.0

با گیت فلو اکستنشن :

git flow release finish '0.1.0'

وقتی بخوایم Hotfix ها رو درست کنیم :

بدون گیت فلو اکستنشن :

git checkout master
git checkout -b hotfix_branch

با گیت فلو اکستنشن :

$ git flow hotfix start hotfix_branch

وقتی Hotfix ها حل شدند و میخوایم روی Master و Develop منتقل کنیم :

بدون گیت فلو اکستنشن :

git checkout master
git merge hotfix_branch
git checkout develop
git merge hotfix_branch
git branch -D hotfix_branch

با گیت فلو اکستنشن :

$ git flow hotfix finish hotfix_branch


یک نوشته به صورت تکمیلی برای IDE هایی که Intellij ساخته (مثل اندروید استدیو) هم نوشتم که می‌تونید بخونید .