Sobes.tech
Middle

Čime se razlikuju pristupi Trunk-Based Development i Feature Branching?

sobes.tech АИ

Одговор од АИ

Критеријум Trunk-Based Development (TBD) Feature Branching (FB)
Основна грана Једна главна грана (trunk/main/master) Неколико дуготрајних грана (develop, release, master)
Учесталост спајања Веома честа (бар једном дневно) Ретко (после завршетка функције)
Величина функцијских грана Веома краткотрајне (од неколико минута до сати) Дуготрајне (од дана до недеља)
Интеграција Непрекидна интеграција (CI) је кључна Интеграција је ређа, може бити сложенија
Ризик од конфликата Мање великих конфликата, али више ситних, честих Више великих конфликата при спајању великих грана
Време изласка на продукцију Брзо и често издавање (continuous delivery) Спорије и ређе издавање
Захтеви за тестирање Висок ниво аутоматизованог тестирања Тестови могу бити извршени касније у циклусу
Величина тима Погодно за мале и средње тимове, али се може скалатирати са дисциплином Погодно за велике тимове

Trunk-Based Development:

  • Фокус на честу интеграцију малих промена директно у главну грана.
  • Захтева строгу дисциплину, аутоматизоване тестове и флагове за функције за управљање издањем недовршених функција.
  • Смањује ризике везане за велика спајања.

Feature Branching:

  • Свака функција се развија у посебној грани.
  • Спајање се врши само након завршетка функције.
  • Може довести до "задушавања" промена и сложених конфликата при спајању ако гране дуго живе.

Пример кода за TBD (поједностављено):

// Развој се води директно у main/trunk
public class FeatureA {
    public void doStuff() {
        // Код функције А
    }
}

// Други развојач комитова скоро истовремено у main/trunk
public class FeatureB {
    public void doOtherStuff() {
        // Код функције Б
    }
}

Пример кода за FB (поједностављено):

// Развојач 1 ради у грани feature/A
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // Код функције А
    }
}

// Развојач 2 ради у грани feature/B
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // Код функције Б
    }
}

// После завршетка функције А, грана се спаја у develop
// git checkout develop
// git merge feature/A

// После завршетка функције Б, грана се спаја у develop
// git checkout develop
// git merge feature/B // Могући конфликти са кодом из feature/A