Sobes.tech
Middle

Kādas ir atšķirības starp Trunk-Based Development un Feature Branching pieejām?

sobes.tech AI

Atbilde no AI

Kritērijs Trunk-Based Development (TBD) Feature Branching (FB)
Galvenā zars Viena galvenā zars (trunk/main/master) Daudzas ilgtermiņa zars (develop, release, master)
Apvienošanas biežums Ļoti bieži (vismaz reizi dienā) Reti (pēc funkcijas pabeigšanas)
Funkciju zaru izmērs Ļoti īslaicīgi (dažas minūtes līdz stundām) Ilgtermiņa (dienas līdz nedēļām)
Integrācija Nepārtraukta integrācija (CI) ir būtiska Integrācija notiek retāk, var būt sarežģītāka
Konfliktu risks Mazāk lielu konfliktu, bet vairāk mazu, biežu Vairāk lielu konfliktu lielu zaru apvienošanā
Izlaišanas laiks Ātrs un bieži izlaidums (pastāvīgs piegāde) Lēnāks un retāks izlaidums
Testēšanas prasības Augsta līmeņa automatizēta testēšana Testi var tikt veikti vēlākā ciklā
Komandas lielums Piemērots mazām un vidējām komandām, bet mērogojams ar disciplīnu Piemērots lielām komandām

Trunk-Based Development:

  • Uzsvars uz biežu integrāciju mazās izmaiņās tieši galvenajā zarā.
  • Prasa stingru disciplīnu, automatizētus testus un funkciju karogus izlaiduma pārvaldībai.
  • Samazina lielu apvienojumu riskus.

Feature Branching:

  • Katrs funkcija tiek izstrādāta atsevišķā zarā.
  • Apvienošana notiek tikai pēc funkcijas pabeigšanas.
  • Var novest pie "pārpildīšanas" ar izmaiņām un sarežģītiem konfliktiem, ja zari ilgi pastāv.

Piemērs kodam TBD (vienkāršots):

// Izstrāde notiek tieši main/trunk
public class FeatureA {
    public void doStuff() {
        // Funkcijas A kods
    }
}

// Cits izstrādātājs gandrīz vienlaikus komitē main/trunk
public class FeatureB {
    public void doOtherStuff() {
        // Funkcijas B kods
    }
}

Piemērs kodam FB (vienkāršots):

// Izstrādātājs 1 strādā ar feature/A zarā
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // Funkcijas A kods
    }
}

// Izstrādātājs 2 strādā ar feature/B zarā
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // Funkcijas B kods
    }
}

// Pēc funkcijas A pabeigšanas, zars tiek apvienots ar develop
// git checkout develop
// git merge feature/A

// Pēc funkcijas B pabeigšanas, zars tiek apvienots ar develop
// git checkout develop
// git merge feature/B // Iespējami konflikti ar kodu no feature/A