Sobes.tech
Middle

V čom sa líšia prístupy Trunk-Based Development a Feature Branching?

sobes.tech AI

Odpoveď od AI

Kritérium Trunk-Based Development (TBD) Feature Branching (FB)
Hlavná vetva Jedna hlavná vetva (trunk/main/master) Niekoľko dlhodobých vetiev (develop, release, master)
Frekvencia zlúčení Veľmi časté (aspoň raz denne) Zriedkavé (po dokončení funkcie)
Veľkosť funkčných vetiev Veľmi krátkodobé (niekoľko minút až hodín) Dlhodobé (dní až týždňov)
Integrácia Nepretržitá integrácia (CI) je kľúčová Integrácia je menej častá, môže byť zložitejšia
Riziko konfliktov Menej veľkých konfliktov, ale viac drobných, častých Viac veľkých konfliktov pri zlúčení veľkých vetiev
Čas na vydanie Rýchle a časté vydanie (continuous delivery) Pomalejšie a zriedkavejšie vydanie
Požiadavky na testy Vysoká úroveň automatizovaného testovania Testy môžu byť vykonávané neskôr v cykle
Veľkosť tímu Vhodné pre malé a stredné tímy, ale škálovateľné s disciplínou Vhodné pre veľké tímy

Trunk-Based Development:

  • Zameranie na častú integráciu malých zmien priamo do hlavnej vetvy.
  • Vyžaduje prísnu disciplínu, automatizované testy a funkčné vlajky na správu nevyriešených funkcií.
  • Znižuje riziká spojené s veľkými zlúčeniami.

Feature Branching:

  • Každá funkcia sa vyvíja v samostatnej vetve.
  • Zlúčenie sa vykonáva až po dokončení funkcie.
  • Môže viesť k "zaplávaniu" zmien a zložitým konfliktom pri zlúčení, ak vetvy žijú dlho.

Príklad kódu pre TBD (zjednodušene):

// Vývoj prebieha priamo v main/trunk
public class FeatureA {
    public void doStuff() {
        // Kód funkcie A
    }
}

// Iný vývojár commitne takmer súčasne do main/trunk
public class FeatureB {
    public void doOtherStuff() {
        // Kód funkcie B
    }
}

Príklad kódu pre FB (zjednodušene):

// Vývojár 1 pracuje na vetve feature/A
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // Kód funkcie A
    }
}

// Vývojár 2 pracuje na vetve feature/B
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // Kód funkcie B
    }
}

// Po dokončení funkcie A, vetva sa zlúči do develop
// git checkout develop
// git merge feature/A

// Po dokončení funkcie B, vetva sa zlúči do develop
// git checkout develop
// git merge feature/B // Možné konflikty s kódom z feature/A