Git workflow (GitFlow, trunk)
Workflow гэдэг нь баг хэрхэн branch үүсгэж, merge хийж, release гаргадаг дүрмийн тогтолцоо. Хамгийн өргөн тархсан гурван workflow-г авч үзье.
1. GitFlow
2010 онд Vincent Driessen санал болгосон классик workflow. Олон урт хугацааны branch ашигладаг.
Branch бүтэц
main — Зөвхөн production-д гарсан код
develop — Хөгжүүлэлтийн үндсэн branch
feature/* — Шинэ функц бүрт тусдаа branch
release/* — Release бэлтгэх branch
hotfix/* — Production дээрх яаралтай засвар
Ажиллах дараалал
main ─────────────────────────────────► production
└─ develop ──────────────────────────► хөгжүүлэлт
├─ feature/login ──► develop шинэ функц
├─ feature/payment ► develop шинэ функц
├─ release/1.0 ────► main release бэлтгэх
└─ hotfix/crash ───► main яаралтай засвар
└──► develop
Практик команд
# Feature эхлэх
git checkout develop
git checkout -b feature/login
# Feature дуусгах
git checkout develop
git merge feature/login
git branch -d feature/login
# Release эхлэх
git checkout develop
git checkout -b release/1.0
# ... version дугаар шинэчлэх, тест хийх ...
# Release дуусгах
git checkout main
git merge release/1.0
git tag -a v1.0.0 -m "v1.0.0 release"
git checkout develop
git merge release/1.0
git branch -d release/1.0
# Hotfix
git checkout main
git checkout -b hotfix/payment-crash
# ... засвар хийх ...
git checkout main
git merge hotfix/payment-crash
git checkout develop
git merge hotfix/payment-crash
GitFlow-ийн давуу ба сул тал
| Давуу тал | Сул тал | | -------------------------------------- | ---------------------------------- | | Тодорхой бүтэц, дүрэм | Хэт төвөгтэй | | Олон хувилбарыг зэрэг дэмжих боломжтой | Branch-ууд удаан нээлттэй байдаг | | Том багт тохиромжтой | CI/CD-тэй хэрэгжүүлэхэд хүндрэлтэй |
2. Trunk-based development
Бүх хөгжүүлэгч нэг branch (main эсвэл trunk) руу байнга commit хийдэг арга. Branch-ууд маш богино хугацаанд нээлттэй байдаг (1–2 өдөр).
Бүтэц
main ──●──●──●──●──●──●──► байнгын шинэ commit
↑ deploy автоматаар
feature branch-ууд:
└─ feature/x (1-2 өдөр) ──► main
Практик команд
# Өглөө: main-с шинэчилж, branch үүсгэнэ
git checkout main
git pull origin main
git checkout -b feature/add-button
# Тэр өдрөө дуусгаж merge хийнэ
git checkout main
git merge feature/add-button
git push origin main
git branch -d feature/add-button
Feature flags
Trunk-based-д дуусаагүй функцийг main-д оруулахдаа feature flag ашигладаг:
// Feature flag ашиглан нуух
const SHOW_NEW_PAYMENT = false;
{SHOW_NEW_PAYMENT && <NewPaymentForm />}
Функц бэлэн болмогц flag-г true болгоно — дахин deploy хийхгүйгээр идэвхжинэ.
Trunk-based-ийн давуу ба сул тал
| Давуу тал | Сул тал | | ---------------------------- | --------------------------------- | | Merge conflict бараг байхгүй | Хатуу тест шаардлага | | CI/CD-тэй маш сайн нийцдэг | Туршлагагүй багт хэцүү | | Байнга deploy хийх боломжтой | Feature flag удирдах шаардлагатай |
3. GitHub Flow
GitHub-с санал болгосон хялбарчилсан workflow. GitFlow-с хамаагүй энгийн.
Бүтэц
main ────────────────────────────────► production
└─ feature/x ──► PR ──► main нэг дор
Дүрмүүд (ердөө 6)
mainbranch байнга deploy хийхэд бэлэн байна- Шинэ ажил хийхдээ
main-с branch үүсгэнэ - Branch-д байнга commit хийж, GitHub руу push хийнэ
- PR үүсгэж, code review хийлгэнэ
- Review дуусмагц
main-д merge хийнэ - Merge хийгдмэгц шууд deploy хийнэ
Практик команд
# Branch үүсгэнэ
git checkout -b feature/dark-mode
# Ажиллаж, commit хийнэ
git add .
git commit -m "feat: dark mode нэмэх"
git push origin feature/dark-mode
# GitHub дээр PR үүсгэнэ → review → merge
# Merge хийгдмэгц автоматаар deploy
Харьцуулалт — аль байгууллагад аль нь тохиромжтой?
| | GitFlow | GitHub Flow | Trunk-based | | ------------------- | --------------------- | ------------- | ------------ | | Хэмжээ | Том баг | Дунд баг | Аль ч хэмжээ | | Release давтамж | Тогтмол (сар, улирал) | Байнга | Өдөр бүр | | Туршлага | Дунд, дээд | Бүх түвшин | Дунд, дээд | | CI/CD | Тийм биш шаардлага | Тохиромжтой | Зайлшгүй | | Жишээ | Томоохон enterprise | Startup, SaaS | Google, Meta |
Хурдан шийдвэрлэх арга
- Та ганцаараа эсвэл жижиг баг → GitHub Flow
- Олон хувилбар зэрэг дэмжих шаардлагатай → GitFlow
- Өдөр бүр deploy, CI/CD бүтэн бэлэн → Trunk-based
Дараагийн хичээлд:
Бодит GitHub repository үүсгэж, сурсан бүхнээ нэгтгэсэн эцсийн төслийг хийнэ.