Branch, Merge va Pull Request jarayonlari
Feature branching, merge konfliktlari, PR va Code Review
10-sinfAdvanced Android4-hafta · 11-dars
Bugun nimani o'rganamiz?
Branch
Loyihaning mustaqil shoxchasi: xavfsiz tajriba maydoni
Merge
Ikki branchni bitta tarixga birlashtirish va konfliktlar
Pull Request
Rasmiy so'rov va jamoaviy Code Review
01
Branch
Daraxtning shoxlari kabi: tanaga zarar bermaydi
Daraxt va shoxlar
Qismlarni bosing. Har bir shox mustaqil rivojlanadi, tana buzilmaydi.
Nega alohida branch?
To'g'ridan-to'g'ri main
Kichik xato butun loyihani ishdan chiqaradi. Katta jamoada oqibat halokatli.
VS
Alohida branch
Xavfsiz va mustaqil: o'zgarish asosiy loyihaga tegmaydi.
Ichki ko'rinish: branch bu ko'rsatkich
Commitlar zanjir, branch esa zanjirdagi nuqtaga ishora. Shuning uchun tez va yengil.
Branch yaratish
git checkout -b login-feature
Bitta buyruq: branch yaratadi va unga o'tadi.
Branch ichida ishlash
git checkout -b login-feature
git add .
git commit -m "Login ekrani qo'shildi"
git checkout main
main'ga qaytsak, login kodi u yerda yo'q: o'zgarish shoxda qoldi.
Branch nomlash standarti
feature/loginbugfix/profile-crashhotfix/payment-errorrefactor/home-screen
- Nom branchning maqsadini bildiradi
- Jamoa bir qarashda ishni tushunadi
02
Merge
Ikki branchni bitta tarixga birlashtirish
Merge: shox tanaga qo'shiladi
Git ikki branchdagi commitlarni solishtiradi va yagona kodga birlashtiradi.
Merge usullari
Oddiy merge
Ikki tarix saqlanadi, merge commit qo'shiladi
Fast-forward va squash
Dastur ro'yxatiga kirgan usullar. Chuqurroq: pastga
Fast-forward va squash
- Fast-forward: main shoxdan keyin o'zgarmagan bo'lsa, pointer shunchaki oldinga suriladi
- Squash: bir nechta mayda commit bitta commitga birlashtiriladi
Aniqlik: hujjat bu ikki usulni faqat nomi bilan keltiradi, tavsif umumiy ma'lumot.
Rebase: tarixni silliqlash
Merge ikki branchni parallel saqlaydi. Rebase esa branchni asosiy branch ustiga qaytadan "yopishtiradi".
Noto'g'ri ishlatilsa xatolarga olib keladi. Jamoalarda odatda merge oldidan branchni yangilash uchun ishlatiladi.
Merge konflikti
Bir faylning bir xil satri ikki branchda turlicha o'zgarsa, konflikt yuzaga keladi.
Git konfliktni shunday ko'rsatadi
<<<<<<< HEAD
fun loadUser() { ... }
=======
fun loadUserData() { ... }
>>>>>>> login-feature
Tepasi main'dagi kod, pasti login-feature'dagi kod.
Konfliktni hal qilish: 4 qadam
1. Faylni oching
Belgilar (<<<, ===, >>>) turgan joyni toping.
2. Variantni tanlang
Biri to'g'rimi yoki ikkisini birlashtirasizmi?
3. Belgilarni o'chiring
Git qo'shgan belgilar qolmasin, kod to'g'ri bo'lsin.
4. add va commit
Konflikt hal bo'ldi, merge yakunlanadi.
Mini-test: konflikt
Konflikt qachon yuzaga keladi?
Git qaysi versiya to'g'riligini bilmaydi va to'xtab, qo'lda hal qilishni so'raydi.
03
Pull Request va Review
Rasmiy so'rov va jamoaviy tekshiruv
Pull Request jarayoni
PR: "mana shunday o'zgarish kiritdim, iltimos tekshirib chiqing" degan rasmiy murojaat.
Feature branch modeli: "Maktab Jadvali"
git checkout -b feature/lessons-screen
git add .
git commit -m "Lessons screen UI created"
git push origin feature/lessons-screen
Keyin platformada PR ochiladi, jamoa ko'rib chiqadi, sharhlar hisobga olinadi va merge qilinadi.
Code Review: nimani tekshiramiz?
Toza kod
Tushunarli, ortiqcha takrorlanishsiz
Xavfsizlik
Xavfsizlik xatolari bormi?
Arxitektura
Qoidalarga amal qilinganmi?
UI natijasi
Ekran kutilgandek ishlayaptimi?
Branch strategiyalari
Git FlowGitHub FlowTrunk Based Development
Android jamoalar ko'pincha GitHub Flow yoki Trunk Based'ni qo'llaydi. Chuqurroq: pastga
Git Flow: branch turlari
- main: yakuniy barqaror kod
- develop: rivojlanayotgan kod
- feature: yangi funksiyalar
- release: nashrga tayyor kod
- hotfix: zudlik bilan tuzatishlar
PR madaniyati
PR ochish bilan siz boshqalarning vaqtini hurmat qilasiz va kodingizga mas'uliyat bilan qaraysiz.
toza kodma'noli commitkichik PRhurmatli muloqot
Odatiy xatolar
To'g'ridan-to'g'ri main'ga yozish: xato butun loyihani buzadi.
Konflikt belgilarini (<<<<<<<, =======) o'chirmay commit qilish.
Juda katta PR: ko'rib chiqish qiyin.
Yechim: feature branch, kichik PR, ma'noli commit va review.
Atamalarni aylantiring
Loyihaning mustaqil shoxchasi.
Ikki branchning yagona kodga aylanishi.
O'zgarishni birlashtirish uchun rasmiy so'rov.
Mini-test: PR
Pull Request nima?
PR jamoaga kodni ko'rib chiqish va fikr bildirish imkonini beradi.
Amaliy topshiriq 30 daqiqa
OsonYangi branch oching, unda fayl yarating va commit qiling. main'ga qaytib faylni tekshiring.
O'rtaBranchni main'ga merge qiling va git log --oneline bilan tarixni ko'ring.
QiyinSun'iy konflikt hosil qiling, qo'lda hal qiling va merge'ni yakunlang.
Xulosa
Branch
Mustaqillik va xavfsizlik.
Merge
Hammasini yagona tarixga birlashtiradi; konfliktni qo'lda hal qilamiz.
Pull Request
Jamoaviy ko'rib chiqish orqali sifat.
Madaniyat
Kichik PR, ma'noli commit, hurmatli sharh.
Uyga vazifa va anons
1. Feature branch
feature/ nomli branch ochib, 2 commit qiling va merge qiling.
2. Konflikt
Konflikt hosil qilib, qo'lda hal qiling.
Keyingi dars: Continuous Integration (CI/CD) tushunchasi.