Sobes.tech
Middle

Trunk-Based Development va Feature Branching yondashuvlari qanday farq qiladi?

sobes.tech AI

AIdan javob

Kriteriya Trunk asosidagi rivojlanish (TBD) Funktsiya filiallari (FB)
Asosiy filial Bir asosiy filial (trunk/main/master) Bir nechta uzoq umrli filiallar (develop, release, master)
Birlashtirish chastotasi Juda tez (kuniga kamida bir marta) Kamroq (fayl tugagach)
Fayl filiallari hajmi Juda qisqa muddatli (bir necha daqiqadan soatgacha) Uzoq umrli (kunlar yoki hafta)
Integratsiya Doimiy integratsiya (CI) muhim hisoblanadi Kamroq vaqtda amalga oshiriladi, murakkab bo'lishi mumkin
Konfliktlar xavfi Kichikroq katta konfliktlar, lekin ko'proq kichik va tez-tez Katta konfliktlar katta filiallarni birlashtirganda
Chiqarish vaqti Tez va tez-tez (uzluksiz yetkazib berish) Sekinroq va kamroq tez-tez
Test talablari Testlarni avtomatlashtirish darajasi yuqori Testlar keyinroq bajarilishi mumkin
Jamoa hajmi Kichik va o'rta jamoalar uchun mos, intizom bilan kengaytiriladi Katta jamoalar uchun yaxshi

Trunk asosidagi rivojlanish:

  • Kichik o'zgarishlarni tez-tez asosiy filialga integratsiya qilishga qaratilgan.
  • Qattiq intizom, avtomatlashtirilgan testlar va funksiyalar bayroqlari bilan boshqarish talab qilinadi.
  • Katta birlashtirishlar bilan bog'liq xavflarni kamaytiradi.

Funktsiya filiallari:

  • Har bir funktsiya alohida filialda ishlab chiqiladi.
  • Faqat funktsiya tugagach, birlashtiriladi.
  • Agar filiallar uzoq yashasa, "suvga cho'mish" va murakkab konfliktlarga olib kelishi mumkin.

TBD uchun kod misoli (soddalashtirilgan):

// Rivojlanish to'g'ridan-to'g'ri main/trunkda amalga oshiriladi
public class FeatureA {
    public void doStuff() {
        // A funktsiyasi kodi
    }
}

// Boshqa dasturchi deyarli bir vaqtning o'zida main/trunkga commit qiladi
public class FeatureB {
    public void doOtherStuff() {
        // B funktsiyasi kodi
    }
}

FB uchun kod misoli (soddalashtirilgan):

// 1-dasturchi feature/A filialida ishlaydi
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // A funktsiyasi kodi
    }
}

// 2-dasturchi feature/B filialida ishlaydi
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // B funktsiyasi kodi
    }
}

// A funktsiyasi tugagach, filial developga merge qilinadi
// git checkout develop
// git merge feature/A

// B funktsiyasi tugagach, filial developga merge qilinadi
// git checkout develop
// git merge feature/B // Konfliktlar yuzaga kelishi mumkin