AXV

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

main (asosiy loyiha) feature/login bugfix/profile-crash refactor/home-screen

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

A B C Dmain E Ffeature/ui

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

main login-feature Mmerge commit

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

main fun loadUser() login-feature fun loadUserData() CONFLICT bir xil qator

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

Branch Push PR ochish Review Merge

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

Branch

bosing

Loyihaning mustaqil shoxchasi.

Merge

bosing

Ikki branchning yagona kodga aylanishi.

Pull Request

bosing

O'zgarishni birlashtirish uchun rasmiy so'rov.

Mini-test: PR

Pull Request nima?

PR jamoaga kodni ko'rib chiqish va fikr bildirish imkonini beradi.

Raqamlarda bugungi dars

0
asosiy jarayon
0
branch turi nomi
0
review mezoni

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.