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