16-bo‘lim
Ish oqimi modellari
GitHub Flow, Git Flow, GitLab Flow va trunk-based development - loyihangizga qaysi biri mos keladi.
Ushbu bo‘lim mundarijasi
Git faqat vosita. Uni qanday ishlatish kerakligini ish oqimi modellari belgilaydi.
Nima uchun model kerak? #
- Kim qaysi tarmoqda ishlashini bilmaydi
mainda ishlamaydigan kod turadi- Reliz chiqarish qo'rqinchli tadbirga aylanadi
- "Bu o'zgarish qayerdan keldi?" degan savol javobsiz qoladi
Model - jamoaning kelishuvi. To'g'ri model - jamoangiz hajmi va reliz tezligiga mos keladigani.
1. GitHub Flow - eng sodda #
Qoidalar:
mainhar doim ishlaydigan holatda- Yangi ish uchun tarmoq yarating
- Muntazam kommit qiling va push qiling
- Pull Request oching
- Tekshiruvdan o'tkazing
mainga merge qiling- Darhol deploy qiling
git switch main && git pull
git switch -c feature/hisobot
# ... ishlash ...
git push -u origin feature/hisobot
gh pr create
# ... tekshiruv va merge ...
git switch main && git pull
git branch -d feature/hisobot
| Afzalligi | Kamchiligi |
|---|---|
| Juda sodda, tez o'rganiladi | Bir nechta versiyani parallel qo'llab-quvvatlash qiyin |
| Doimiy yetkazib berishga mos | Kuchli avtomatik testlar talab qiladi |
| Kam tarmoq - kam chalkashlik | Reliz sanasini rejalashtirish qiyin |
Veb-loyihalar, SaaS xizmatlar, ichki tizimlar - ya'ni bitta versiya ishlab turadigan hamma narsa.
Shubhalansangiz - shu modeldan boshlang.
2. Git Flow - to'liq nazorat #
| Tarmoq | Vazifasi | Qayerdan | Qayerga |
|---|---|---|---|
main | Ishlab chiqarishdagi kod | - | - |
develop | Keyingi reliz | main | main |
feature/* | Yangi imkoniyatlar | develop | develop |
release/* | Relizga tayyorlash | develop | main + develop |
hotfix/* | Shoshilinch tuzatish | main | main + develop |
# Yangi imkoniyat
git switch develop && git pull
git switch -c feature/hisobot
# ... ishlash ...
git switch develop
git merge --no-ff feature/hisobot
# Relizga tayyorlash
git switch -c release/1.2.0 develop
# ... faqat xato tuzatish, yangi imkoniyat qo'shilmaydi ...
git switch main
git merge --no-ff release/1.2.0
git tag -a v1.2.0 -m "Reliz 1.2.0"
git switch develop
git merge --no-ff release/1.2.0
# Shoshilinch tuzatish
git switch -c hotfix/1.2.1 main
# ... tuzatish ...
git switch main
git merge --no-ff hotfix/1.2.1
git tag -a v1.2.1 -m "Shoshilinch tuzatish"
git switch develop
git merge --no-ff hotfix/1.2.1
Model 2010-yilda yaratilgan - o'sha davrda dasturlar yiliga bir necha marta disklarda tarqatilardi.
Bugungi veb-loyihada kuniga bir necha marta deploy qilinadi. Git Flow bunday tezlikda ortiqcha byurokratiyaga aylanadi.
Muallifning o'zi ham keyinchalik: "veb-loyihalar uchun soddaroq modelni tanlang" deb yozgan.
- Mobil ilovalar (App Store tekshiruvi kutiladi)
- Ish stoli dasturlari
- Bir nechta versiya qo'llab-quvvatlanadigan mahsulotlar
- Qat'iy reliz jadvali bo'lgan korporativ loyihalar
# Yordamchi vosita
git flow init
git flow feature start hisobot
git flow feature finish hisobot
3. GitLab Flow - o'rtacha yechim #
main bor, unga qo'shimcha muhit tarmoqlari:
main → staging → production
# Ish main da
git switch -c feature/hisobot main
# ... merge to main ...
# Sinov muhitiga chiqarish
git switch staging
git merge main
# Ishlab chiqarishga
git switch production
git merge staging
| Tarmoq | Muhit |
|---|---|
main | Ishlab chiqish |
staging | Sinov serveri |
production | Haqiqiy foydalanuvchilar |
Bir nechta muhit bo'lgan va deploy qat'iy nazorat qilinadigan loyihalar.
Kod faqat bir yo'nalishda oqadi: main → staging → production. Bu "sinalmagan kod ishlab chiqarishga tushib qolishi" ni imkonsiz qiladi.
4. Trunk-Based Development #
Eng radikal model: tarmoqlar deyarli yo'q.
git switch main && git pull
# ... kichik o'zgarish (bir necha soat) ...
git commit -am "Qidiruv filtri qo'shildi"
git push
Tarmoq yaratilsa ham - bir kundan oshmasin.
Tugallanmagan imkoniyat funksiya kalitlari (feature flags) ortida yashiriladi:
if (sozlama('yangi_qidiruv_yoqilgan')) {
return $this->yangiQidiruv($sorov);
}
return $this->eskiQidiruv($sorov);
Kod main da, lekin foydalanuvchilar uni ko'rmaydi. Tayyor bo'lgach
kalit yoqiladi.
| Afzalligi | Talab qiladi |
|---|---|
| Konfliktlar deyarli yo'q | Juda kuchli avtomatik testlar |
| Doimiy integratsiya | Tajribali jamoa |
| Tez deploy | Funksiya kalitlari tizimi |
Google, Facebook, Netflix kabi kompaniyalar. Kuniga yuzlab deploy qiladigan jamoalar.
Kichik jamoada ham ishlaydi - agar testlar ishonchli bo'lsa.
Solishtirish #
| GitHub Flow | Git Flow | GitLab Flow | Trunk-Based | |
|---|---|---|---|---|
| Doimiy tarmoq | 1 | 2 | 3+ | 1 |
| Murakkablik | Past | Yuqori | O'rta | Past |
| Deploy tezligi | Yuqori | Past | O'rta | Juda yuqori |
| Bir nechta versiya | Yo'q | Ha | Qisman | Yo'q |
| Test talabi | O'rta | Past | O'rta | Juda yuqori |
| Jamoa hajmi | Har qanday | O'rta-katta | O'rta | Tajribali |
Qaysi birini tanlash? #
Soddadan boshlang. Loyiha o'sganda muammo paydo bo'lsa - o'shanda murakkabroq modelga o'ting.
"Keyinchalik kerak bo'lar" deb Git Flow dan boshlash - eng ko'p uchraydigan xato. U kichik jamoani sekinlashtiradi.
Jamoa kelishuvini yozib qo'ying #
CONTRIBUTING.md fayl yarating:
# Loyihaga hissa qo'shish
## Ish oqimi
Biz GitHub Flow modelidan foydalanamiz.
1. `main` dan tarmoq yarating
2. Tarmoq nomi: `feature/`, `fix/`, `docs/` prefiksi bilan
3. Pull Request oching va kamida bitta tasdiq oling
4. "Squash and merge" bilan birlashtiring
5. Tarmoqni o'chiring
## Kommit xabarlari
Konvensional format: `tur(soha): tavsif`
Misol: `feat(savat): mahsulot sonini o'zgartirish qo'shildi`
## Kod uslubi
- PSR-12 standarti
- `composer lint` buyrug'i xatosiz o'tishi kerak
- Yangi mantiq testlar bilan qoplanishi kerak
## Talablar
PR merge qilinishi uchun:
- [ ] Barcha testlar o'tdi
- [ ] Kamida bitta tekshiruvchi tasdiqladi
- [ ] Konflikt yo'q
- To'rt modelning qaysi biri sizning loyihangizga mos kelishini aniqlang.
- Sababini uch jumlada yozing.
- GitHub Flow bo'yicha to'liq tsiklni bajaring: tarmoq, kommit, PR, merge.
- Git Flow ni sinab ko'ring:
developtarmog'ini yarating, undanfeature/testyarating va qaytaring. release/1.0.0tarmog'ini yaratib, unimainga merge qiling va teglang.CONTRIBUTING.mdfayl yozing.- Funksiya kaliti (feature flag) g'oyasini o'z loyihangizga qanday qo'llash mumkinligini o'ylab ko'ring.
Xulosa #
- Ish oqimi modeli - jamoaning kelishuvi, texnik talab emas.
- GitHub Flow - bitta
main, qisqa tarmoqlar, tez deploy. Eng ko'p ishlatiladi. - Git Flow -
main+develop+ uch turdagi tarmoq. Reliz jadvali bo'lgan loyihalar uchun. - GitLab Flow - muhit tarmoqlari: kod faqat oldinga oqadi.
- Trunk-Based - tarmoqsiz, funksiya kalitlari bilan. Kuchli testlar talab qiladi.
- Kichik jamoada Git Flow ortiqcha byurokratiya keltiradi.
- Soddadan boshlang, kerak bo'lganda murakkablashtiring.
- Kelishuvni
CONTRIBUTING.mdda yozib qo'ying.
Keyingi bo'limda xatolarni topish vositalarini o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.