Middle
Miben különböznek a Trunk-Based Development és a Feature Branching megközelítések?
sobes.tech MI
Válasz az MI-től
| Kritérium | Trunk-Based Development (TBD) | Feature Branching (FB) |
|---|---|---|
| Alapvető ágak | Egy fő ág (trunk/main/master) | Több hosszú életű ág (develop, release, master) |
| Összevonási gyakoriság | Nagyon gyakori (naponta legalább egyszer) | Ritka (a funkció befejezése után) |
| Funkció ágak mérete | Nagyon rövid életű (néhány perc-tól órákig) | Hosszú életű (napoktól hetekig) |
| Integráció | Folyamatos integráció (CI) a kulcsfontosságú | Az integráció ritkábban történik, bonyolultabb lehet |
| Konfliktus kockázat | Kevesebb nagy konfliktus, de több apró, gyakori konfliktus | Több nagy konfliktus nagy ágak összevonásakor |
| Kiadási idő | Gyors és gyakori kiadás (folyamatos szállítás) | Lassabb és ritkább kiadás |
| Tesztelési követelmények | Magas szintű automatizált tesztelés | A tesztek később is végrehajthatók a ciklusban |
| Csapat mérete | Kisebb és közepes csapatoknak ideális, de méretezhető fegyelmezett működéssel | Nagyobb csapatoknak is megfelelő |
Trunk-Based Development:
- A fókusz a gyakori, kis változtatások közvetlen integrálásán van a fő ágba.
- Szigorú fegyelem, automatizált tesztek és funkciózászlók szükségesek a be nem fejezett funkciók kezeléséhez.
- Csökkenti a nagy összevonásokkal járó kockázatokat.
Feature Branching:
- Minden funkció külön ágban készül.
- Csak a funkció befejezése után történik az összevonás.
- Hosszú életű ágak esetén változások "elfúlhatnak" és összetett konfliktusok alakulhatnak ki.
Egyszerűsített kód példa TBD-hez:
// Közvetlenül a main/trunk fejlesztés
public class FeatureA {
public void doStuff() {
// A funkció A kódja
}
}
// Egy másik fejlesztő szinte ugyanakkor commitol a main/trunk-ba
public class FeatureB {
public void doOtherStuff() {
// A funkció B kódja
}
}
Egyszerűsített kód példa FB-hez:
// Fejlesztő 1 a feature/A ágban dolgozik
// git checkout -b feature/A develop
public class FeatureA {
public void doStuff() {
// A funkció A kódja
}
}
// Fejlesztő 2 a feature/B ágban dolgozik
// git checkout -b feature/B develop
public class FeatureB {
public void doOtherStuff() {
// A funkció B kódja
}
}
// A funkció A befejezése után az ág összevonása a develop-be
// git checkout develop
// git merge feature/A
// A funkció B befejezése után az ág összevonása a develop-be
// git checkout develop
// git merge feature/B // Konfliktusok léphetnek fel a feature/A kóddal