Sobes.tech
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