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