Sobes.tech
Middle

Kuo skiriasi Trunk-Based Development ir Feature Branching požiūriai?

sobes.tech AI

Atsakymas iš AI

Kriterijus Trunk-Based Development (TBD) Feature Branching (FB)
Pagrindinė šaka Viena pagrindinė šaka (trunk/main/master) Kelios ilgalaikės šakos (develop, release, master)
Susijungimo dažnumas Labai dažnas (bent kartą per dieną) Retas (po funkcijos užbaigimo)
Funkcinių šakų dydis Labai trumpalaikės (kelios minutės iki valandų) Ilgalaikės (dienos iki savaičių)
Integracija Nuolatinė integracija (CI) yra svarbi Integracija vyksta rečiau, gali būti sudėtingesnė
Konfliktų rizika Mažiau didelių konfliktų, bet daugiau smulkių, dažnų Daug didelių konfliktų didelių šakų sujungimo metu
Išleidimo laikas Greitas ir dažnas išleidimas (nuolatinis pristatymas) Lėtesnis ir retesnis išleidimas
Testavimo reikalavimai Aukšto lygio automatizuotas testavimas Testai gali būti atliekami vėliau cikle
Komandos dydis Tinka mažoms ir vidutinėms komandoms, bet gali būti mastelinis su disciplina Tinka didelėms komandoms

Trunk-Based Development:

  • Dėmesys dažnai integracijai mažų pakeitimų tiesiogiai į pagrindinę šaką.
  • Reikalauja griežtos disciplinos, automatizuotų testų ir funkcijų žymeklių valdymui.
  • Sumažina didelių sujungimų riziką.

Feature Branching:

  • Kiekviena funkcija vystoma atskiroje šakoje.
  • Susijungimas vyksta tik po funkcijos užbaigimo.
  • Gali sukelti "užtvindymą" pakeitimais ir sudėtingus konfliktus, jei šakos ilgai gyvuoja.

Pavyzdinis kodas TBD (supaprastintas):

// Vystymas vyksta tiesiogiai main/trunk
public class FeatureA {
    public void doStuff() {
        // Funkcijos A kodas
    }
}

// Kitas kūrėjas beveik tuo pačiu metu įrašo į main/trunk
public class FeatureB {
    public void doOtherStuff() {
        // Funkcijos B kodas
    }
}

Pavyzdinis kodas FB (supaprastintas):

// Kūrėjas 1 dirba su feature/A šaka
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // Funkcijos A kodas
    }
}

// Kūrėjas 2 dirba su feature/B šaka
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // Funkcijos B kodas
    }
}

// Po funkcijos A užbaigimo, šaka sujungiama į develop
// git checkout develop
// git merge feature/A

// Po funkcijos B užbaigimo, šaka sujungiama į develop
// git checkout develop
// git merge feature/B // Gali būti konfliktų su kodu iš feature/A