Sobes.tech
Middle

Millised on Trunk-Based Development ja Feature Branching lähenemiste erinevused?

sobes.tech AI

Vastus AI-lt

Kriteerium Trunk-Based Development (TBD) Feature Branching (FB)
Põhivõti Üks põhivõti (trunk/main/master) Mitmed pikaajalised võtted (develop, release, master)
Ühinemise sagedus Väga sageli (vähemalt kord päevas) Harva (pärast funktsiooni lõpetamist)
Funktsioonivõtete suurus Väga lühiajaline (mõned minutid kuni tundideni) Pikaajaline (päevad kuni nädalad)
Integreerimine Jätkuv integreerimine (CI) on oluline Integreerimine toimub harvem, võib olla keerulisem
Konfliktide risk Vähem suuri konflikte, kuid rohkem väikeseid, sagedasi Rohkem suuri konflikte suurte võttete ühendamisel
Väljalaske aeg Kiire ja sagedane väljalase (continuous delivery) Aeglasem ja harvem väljalase
Testimise nõuded Kõrgelt automatiseeritud testimine Testid võivad toimuda hiljem tsüklis
Meeskonna suurus Sobib väikestele ja keskmise suurusega meeskondadele, kuid skaleeritav distsipliiniga Sobib suurtele meeskondadele

Trunk-Based Development:

  • Keskendub sagedasele väikeste muudatuste integreerimisele otse põhivõtmesse.
  • Nõuab ranget distsipliini, automatiseeritud teste ja funktsioonilippe väljalaske haldamiseks.
  • Vähendab suuri ühendusi seotud riske.

Feature Branching:

  • Iga funktsioon arendatakse eraldi võttes.
  • Ühinemine toimub ainult pärast funktsiooni lõpetamist.
  • Võib viia "üleujutuse" muudatustega ja keeruliste konfliktideni, kui võtted pikka aega elavad.

Näidiskood TBD jaoks (lihtsustatud):

// Arendus toimub otse main/trunkis
public class FeatureA {
    public void doStuff() {
        // Funktsiooni A kood
    }
}

// Teine arendaja kommitseb peaaegu samaaegselt main/trunkis
public class FeatureB {
    public void doOtherStuff() {
        // Funktsiooni B kood
    }
}

Näidiskood FB jaoks (lihtsustatud):

// Arendaja 1 töötab feature/A võttes
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // Funktsiooni A kood
    }
}

// Arendaja 2 töötab feature/B võttes
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // Funktsiooni B kood
    }
}

// Pärast funktsiooni A lõpetamist, võte ühendatakse developiga
// git checkout develop
// git merge feature/A

// Pärast funktsiooni B lõpetamist, võte ühendatakse developiga
// git checkout develop
// git merge feature/B // Võimalikud konfliktid koodiga funktsioon A-st