AXV

Branching va Conventional Commits

Yuzlab muhandis bitta loyihada bir-biriga xalaqit bermasdan qanday ishlaydi?

11-sinfProfessional IT development2-hafta · 4-dars

Bugun nimani uddalaymiz?

Branching

Nega main ga to'g'ridan-to'g'ri yozilmaydi va tarmoq qanday ishlaydi

3 strategiya

Git Flow, GitHub Flow, Trunk-based: qachon qaysi biri

Commit madaniyati

Atomik commit va Conventional Commits formati

01

Tarmoqlash (branching)

Parallel dunyo: xato qilish xavfsiz bo'lgan joy

Branch: parallel dunyo

main main buzilmaydi feature/login bemalol tajriba merge

Merge belgisini bosing: izoh chiqadi.

Ichki ko'rinish: branch nima?

a1f b72 c3d main d9e feature/login 41 bayt

Branch fayllar nusxasi emas, commitga ko'rsatuvchi yengil pointer. Pastga ↓

Nega bunchalik tez?

0
bitta branch hajmi
0
SHA-1 xesh-kod
0.001 s
tarmoq ochish vaqti
1 GB loyihada 10 ta branch ham kompyuterni qotirmaydi.

Branch buyruqlari


# yangi tarmoq ochish va unga o'tish
git switch -c feature/add-login

# eski sintaksis (xuddi shu)
git checkout -b feature/add-login

# ro'yxat va asosiy tarmoqqa qaytish
git branch ; git switch main

# ishi bitgan tarmoqni o'chirish
git branch -d feature/add-login
  

Ikki dasturchi, ikki commit


git commit -m "ishlar qilindi"
  
Qaysi fayl? Nima o'zgardi? Noma'lum.

Ikki dasturchi, ikki commit


git commit -m "fix(auth): add password argument to login"
  
Tur, joy va ma'no bir qarashda ko'rinadi.
02

3 ta strategiya

Git Flow, GitHub Flow, Trunk-based development

Git Flow: 5 ta rol

main hotfix/* release/* develop feature/* v1.0 hotfix

Tarmoq nomini bosing: vazifasi chiqadi. Qachon: relizlari kam, qat'iy sinovli tizimlar (antivirus, tibbiyot, bank).

GitHub Flow: 5 qadam

Branch main dan Commit kichik Push origin ga PR review Merge + deploy main har soniyada deploy qilishga tayyor

Trunk-based development

Uzoq yashovchi branch yo'q: hamma kuniga bir necha marta kichik commit bilan asosiy tarmoqqa qo'shiladi.
  • Model Google va Meta kabi yirik jamoalarda ishlaydi
  • Tez CI/CD uchun juda mos
  • Chala funksiyalar Feature Flags bilan yashiriladi

Feature Flag nima? Pastga ↓

Feature Flag: o'chirib-yoqgich

Flag o'chiq

Kod main da turibdi, lekin foydalanuvchi uni ko'rmaydi.
VS

Flag yoqiq

Funksiya tayyor bo'lgach, deploy kutmasdan yoqiladi.

Qaysi strategiya qachon?

Git Flow

Relizlari kam, qat'iy sinov: antivirus, bank, tibbiy tizim.

GitHub Flow

Veb-loyiha va startap: bitta main, qisqa branchlar, tez deploy.

Trunk-based

Yuqori tezlikdagi CI/CD, kuniga ko'p integratsiya, Feature Flags.

Mini-test

Production'da to'satdan xato chiqdi. Git Flow da qaysi tarmoq ochiladi?

To'g'ri: hotfix main dan ochiladi va ham main ga, ham develop ga merge qilinadi.
03

Commit madaniyati

Atomik commit va Conventional Commits

Atomik commit

3 kun, 40 fayl, 1 commit

«ishlar qilindi va xatolar tuzatildi». Qaysi commit nimani buzganini topib bo'lmaydi, revert qilish xavfli.

Bitta commit, bitta fikr

Har commit tugallangan mantiqiy o'zgarish. Testlar har commitdan keyin ishlaydi, orqaga qaytarish oson.

bitta fikrloyiha buzilmaydioson revert

Conventional Commits anatomiyasi

feat (auth) ! : add login via google tur scope breaking tavsif (fe'l, buyruq mayli) keyin bo'sh qator va ixtiyoriy body hamda footer

Qismni bosing: ma'nosi chiqadi. Format: type(scope): description

Asosiy turlar

feat

Yangi imkoniyat

fix

Xatoni tuzatish

docs

Faqat hujjat

chore

Build, paketlar

Yana 4 tur pastda ↓

Qolgan turlar

style

Formatlash, mantiq o'zgarmaydi

refactor

Yangi funksiya ham, xato ham yo'q, kod tozalanadi

perf

Tezlik yoki xotira

test

Testlar qo'shish

4 ta qoida

  1. Birinchi qator 50 belgidan oshmasin
  2. Fe'l buyruq maylida: add, fix (added emas)
  3. Birinchi qator oxirida nuqta yo'q
  4. Orqaga moslik buzilsa: feat!:
Breaking change: v1.4.2 dan v2.0.0 ga o'tish signali (SemVer).

Toza tarix


$ git log --oneline
f3a91c2 docs: update API endpoints in README
b72d4e0 fix: resolve crash on empty search query
a10c8d7 feat: add user login via google
9e4f6b1 chore: update dependencies
  
Shu tarixdan semantic-release versiya va CHANGELOG ni o'zi yozadi.
04

Amaliyot

Nomlash standarti va terminalda tarmoqlar

Branch nomlash standarti

feature/

feature/telegram-bot: yangi imkoniyat

fix/

fix/header-logo: oddiy xato

hotfix/

hotfix/payment-crash: shoshilinch

Nom tavsiflovchi bo'lsin: test yoki yangi emas.

Amaliy topshiriq 20 daqiqa

OsonYangi tarmoq oching: git switch -c feat/user-authentication, fayl yarating va feat(auth): bilan commit qiling
O'rtafix(auth): commitini qiling, main ga o'ting: fayl nega yo'qolganini tushuntiring
Qiyingit log --graph --oneline --all --decorate ni tahlil qiling

Odatiy xatolar

main ga to'g'ridan-to'g'ri

Chala kod production'ga tushadi. Har vazifa uchun alohida branch.

«fixed bug.» commit

O'tgan zamon va nuqta: fix: handle null value deb yozing.

Tezkor nazorat

Qaysi commit xabari Conventional Commits qoidasiga mos?

To'g'ri: tur, ikki nuqta, buyruq maylidagi fe'l va nuqtasiz tavsif.

Xulosa

Bugun o'rgandik

Branch pointer ekani, 3 strategiya, atomik commit va type(scope): description formati.

Keyingi dars (5)

Pull Request madaniyati, PR shabloni, merge turlari va konfliktlar.