Understanding Git Flow - Branching Models
Branching Model
Software Development Team တစ်ခုမှာ ဆိုရင် latest released code တွေ၊ latest stable development code တွေ နဲ့ development in progress ဖြစ်နေတဲ့ code တွေ နဲ့ ဘယ် release version မှာ ဘယ် code တွေကို release လုပ်ခဲ့တယ်ဆိုတာတွေကို စနစ်တကျ manage လုပ်ရပါတယ်။ အဲ့လို Team Collaboration လုပ်ရတဲ့အချိန်မှာဆို သင့်တော်ရာ Branching Models တစ်ခုခုကို ရွေးရပါတယ်။ မဟုတ်ရင်တော့ code conflict တွေနဲ့ unstable၊ uncompleted feature တွေကို ထိန်းသိမ်းရခက်ပါတယ်။
Popular of branching models
Branching Models တွေထဲမှာမှ လူသုံးများပြီး ပေါ်ပြူလာ အဖြစ်ဆုံး Branching Model နှစ်ခုကတော့ အောက်ပါအတိုင်းနှစ်မျိုးရှိပါတယ်။
- Git Flow
- Trunk Based
Git Flow
Main Branches
Git Flow မှာ main branches အနေနဲ့ master နဲ့ develop ဆိုပြီးနှစ်ခုရှိပါတယ်။
Master(main) Branch
Master branch ကတော့ latest features တွေထားပါတယ်။ master branch ဟာ နောက်ဆုံး release လုပ်ထားတဲ့ production မှာရှိနေတဲ့ code တွေနဲ့ ထပ်တူကျရပါမယ်။ Production မှာ အကြောင်းအမျိုးမျိုးကြောင့် ပြသနာတစ်ခုခုတက်ခဲ့ရင် Production ကို master မှာရှိတဲ့ code ကို deploy လုပ်တာနဲ့ အကုန်လုံး အရင်တိုင်းပြန်ဖြစ်ရပါမယ်။ အတိုချုပ်ဆိုရင်တော့ master branch မှာ production code တွေထားပါတယ်။
Develop Branch
Develop branch ကတော့ latest stable feature တွေထားပါတယ်။ develop ဆိုတဲ့ နာမည်အတိုင်း feature တွေ တစ်ခုခု develop လုပ်ပြီး stable ဖြစ်တာနဲ့ develop ကို merge လုပ်ပါတယ်။ အဲ့ဒါကြောင့် latest stable code/feature တွေကို ထားတယ်လို့ပြောတာပါ။ master နဲ့ မတူတာက master က production release လုပ်ပြီးသား code တွေပါ။ develop မှာတော့ development လုပ်ပြီး stable ဖြစ်နေတဲ့ feature တွေပါ၊ production release မလုပ်ရသေးခင်ပေါ့။
Supporting Branches
Feature Branches
Feature branch ကတော့ feature/function တစ်ခုကို develop လုပ်ဖို့သုံးပါတယ်။ git flow မှာ feature တစ်ခု အတွက် feature branch တစ်ခု create လုပ်ပြီး develop လုပ်ပါတယ်။ Feature branch တစ်ခု ကို create လုပ်မယ်ဆိုရင် develop branch ကနေလုပ်ရပါတယ်။ development ပြီးတာနဲ့ feature branch ကနေ develop branch ကို merge လုပ်မယ်၊ ပြီးရင် feature branch ကို delete လုပ်ပါ။ feature branch ကို create လုပ်တဲ့ အခါ feature/xxxx naming နဲ့လုပ်ရပါတယ်။
ဥပမာ branch name:
- feature/featureA
- feature/featureB
Release Branch
Release branch ကတော့ ကိုယ် target လုပ်ထားတဲ့ features/functions တွေအကုန် development နဲ့ testing တွေအကုန်ပြီးရင် release branch တစ်ခု create လုပ်ပြီး production release လုပ်ရပါတယ်။ release branch ကိုတော့ develop branch ကနေ create လုပ်ရပါတယ်။ develop branch မှာ latest stable code တွေရှိနေလို့ပါ။ Production release လုပ်ပြီးတာနဲ့ release branch ကနေ master branch ကို merge လုပ်ရပါတယ်။ ပြီးရင်တော့ release branch ကို ဖျက်ရပါတယ်။ master branch မှာ release version နဲ့ tag လုပ်ထားရပါမယ်။ release branch ကို create လုပ်တဲ့ အခါ release/xxxx naming နဲ့လုပ်ရပါတယ်။
ဥပမာ branch name:
- release/1.0.0
- release/1.1.0
Hotfix Branch
Hotfix branch ကတော့ production release လုပ်ပြီးလို့၊ အကြောင်းအမျိုးမျိုးကြောင့် issue/error တစ်ခုခုရှိနေတယ် fix လုပ်ဖို့ လိုနေတယ်ဆိုရင်တော့ hotfix branch တစ်ခု create လုပ်ပြီး bug fix အနေနဲ့ production release ပြန်လုပ်ပေးရပါတယ်။ hotfix branch ကိုတော့ master branch ကနေ create လုပ်ရပါတယ်။ ဘာလို့လဲဆိုတော့ master branch မှာ latest production code တွေရှိလို့ပါ။ hotfix release လုပ်ပြီးတာနဲ့ hotfix branch ကို master နဲ့ develop ကို merge လုပ်ရပါတယ်။ ပြီးရင်hotfix branch ကိုဖျက်မယ်။ master branch မှာ release version နဲ့ tag လုပ်ထားရပါမယ်။ hotfix branch ကို create လုပ်တဲ့ အခါ hotfix/xxxx naming နဲ့လုပ်ရပါတယ်။
ဥပမာ branch name:
- hotfix/1.0.1
- hotfix/1.0.2
Git Flow Extension
Git Flow extension ကတော့ git flow ကို implement လုပ်တဲ့ခါ feature/release/hotfix branch တို့ကို createတာတို့ merge လုပ်တာတို့ကို အလွယ်ကူဆုံးဖြစ်အောင်နောက်ကွယ်ကလုပ်ပေးပါတယ်။ အသေးစိတ်ကို GitFlow ဒီမှာဖတ်ရှုနိုင်ပါတယ်။