16-bo‘lim

Ish oqimi modellari

GitHub Flow, Git Flow, GitLab Flow va trunk-based development - loyihangizga qaysi biri mos keladi.

🕑 9 daqiqa o‘qish 📄 879 so‘z 👁 5 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Nima uchun model kerak?
  2. 1. GitHub Flow - eng sodda
  3. 2. Git Flow - to'liq nazorat
  4. 3. GitLab Flow - o'rtacha yechim
  5. 4. Trunk-Based Development
  6. Solishtirish
  7. Qaysi birini tanlash?
  8. Jamoa kelishuvini yozib qo'ying
  9. Xulosa

Git faqat vosita. Uni qanday ishlatish kerakligini ish oqimi modellari belgilaydi.

Nima uchun model kerak? #

Modelsiz nima bo'ladi?
  • Kim qaysi tarmoqda ishlashini bilmaydi
  • main da 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 #

main har doim ishlaydigan holatda feature/savat fix/narx Har bir merge - avtomatik deploy. Bitta doimiy tarmoq: main
Eng ko'p ishlatiladigan model - veb-loyihalar uchun ideal

Qoidalar:

  1. main har doim ishlaydigan holatda
  2. Yangi ish uchun tarmoq yarating
  3. Muntazam kommit qiling va push qiling
  4. Pull Request oching
  5. Tekshiruvdan o'tkazing
  6. main ga merge qiling
  7. Darhol deploy qiling
Terminal
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
AfzalligiKamchiligi
Juda sodda, tez o'rganiladiBir nechta versiyani parallel qo'llab-quvvatlash qiyin
Doimiy yetkazib berishga mosKuchli avtomatik testlar talab qiladi
Kam tarmoq - kam chalkashlikReliz sanasini rejalashtirish qiyin
Kim ishlatadi?

Veb-loyihalar, SaaS xizmatlar, ichki tizimlar - ya'ni bitta versiya ishlab turadigan hamma narsa.

Shubhalansangiz - shu modeldan boshlang.

2. Git Flow - to'liq nazorat #

main v1.0 v1.1 develop feature/* release/1.0 hotfix/* Ikkita doimiy tarmoq (main, develop) va uch turdagi vaqtinchalik tarmoq main faqat reliz kommitlarini oladi va har biri teglanadi
Git Flow - rejalashtirilgan relizli loyihalar uchun
TarmoqVazifasiQayerdanQayerga
mainIshlab chiqarishdagi kod--
developKeyingi relizmainmain
feature/*Yangi imkoniyatlardevelopdevelop
release/*Relizga tayyorlashdevelopmain + develop
hotfix/*Shoshilinch tuzatishmainmain + develop
Terminal
# 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
Git Flow ko'pchilikka og'irlik qiladi

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.

Kim ishlatadi?
  • Mobil ilovalar (App Store tekshiruvi kutiladi)
  • Ish stoli dasturlari
  • Bir nechta versiya qo'llab-quvvatlanadigan mahsulotlar
  • Qat'iy reliz jadvali bo'lgan korporativ loyihalar
Terminal
# 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:

Natija
main  →  staging  →  production
Terminal
# 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
TarmoqMuhit
mainIshlab chiqish
stagingSinov serveri
productionHaqiqiy foydalanuvchilar
Kim ishlatadi?

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.

Terminal
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.

Bu qanday ishlaydi?

Tugallanmagan imkoniyat funksiya kalitlari (feature flags) ortida yashiriladi:

PHP
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.

AfzalligiTalab qiladi
Konfliktlar deyarli yo'qJuda kuchli avtomatik testlar
Doimiy integratsiyaTajribali jamoa
Tez deployFunksiya kalitlari tizimi
Kim ishlatadi?

Google, Facebook, Netflix kabi kompaniyalar. Kuniga yuzlab deploy qiladigan jamoalar.

Kichik jamoada ham ishlaydi - agar testlar ishonchli bo'lsa.

Solishtirish #

GitHub FlowGit FlowGitLab FlowTrunk-Based
Doimiy tarmoq123+1
MurakkablikPastYuqoriO'rtaPast
Deploy tezligiYuqoriPastO'rtaJuda yuqori
Bir nechta versiyaYo'qHaQismanYo'q
Test talabiO'rtaPastO'rtaJuda yuqori
Jamoa hajmiHar qandayO'rta-kattaO'rtaTajribali

Qaysi birini tanlash? #

Loyihangiz qanday? Veb-sayt yoki SaaS bitta ishlaydigan versiya Mobil yoki desktop reliz jadvali bor Bir nechta muhit staging, production GitHub Flow Git Flow GitLab Flow Shubhalansangiz GitHub Flow dan boshlang - keyin murakkablashtirasiz
Model tanlash - jamoa hajmi va reliz tezligiga bog'liq
Amaliy maslahat

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:

MARKDOWN
# 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
Amaliy topshiriq
  1. To'rt modelning qaysi biri sizning loyihangizga mos kelishini aniqlang.
  2. Sababini uch jumlada yozing.
  3. GitHub Flow bo'yicha to'liq tsiklni bajaring: tarmoq, kommit, PR, merge.
  4. Git Flow ni sinab ko'ring: develop tarmog'ini yarating, undan feature/test yarating va qaytaring.
  5. release/1.0.0 tarmog'ini yaratib, uni main ga merge qiling va teglang.
  6. CONTRIBUTING.md fayl yozing.
  7. 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.md da yozib qo'ying.

Keyingi bo'limda xatolarni topish vositalarini o'rganamiz.

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.