Middle
Worin unterscheiden sich die Ansätze des Trunk-Based Development und des Feature Branching?
sobes.tech KI
Antwort von AI
| Kriterium | Trunk-Basierte Entwicklung (TBD) | Feature Branching (FB) |
|---|---|---|
| Hauptzweig | Ein Hauptzweig (trunk/main/master) | Mehrere langlebige Zweige (develop, release, master) |
| Frequenz der Zusammenführungen | Sehr häufig (mindestens einmal am Tag) | Selten (nach Abschluss einer Funktion) |
| Größe der Feature-Zweige | Sehr kurzlebig (von Minuten bis Stunden) | Langlebig (Tage bis Wochen) |
| Integration | Kontinuierliche Integration (CI) ist entscheidend | Die Integration erfolgt seltener, kann komplexer sein |
| Konflikt-Risiko | Weniger große Konflikte, aber mehr kleine und häufige | Mehr große Konflikte beim Zusammenführen großer Zweige |
| Zeit bis zum Release | Schnell und häufig (kontinuierliche Lieferung) | Langsamer und seltener |
| Testanforderungen | Hohes Maß an Automatisierung der Tests | Tests können später im Zyklus durchgeführt werden |
| Teamgröße | Besser geeignet für kleine und mittlere Teams, skalierbar mit Disziplin | Gut geeignet für große Teams |
Trunk-basierte Entwicklung:
- Fokus auf häufige Integration kleiner Änderungen direkt in den Hauptzweig.
- Erfordert strenge Disziplin, automatisierte Tests und Feature-Flags zur Steuerung von unfertigen Funktionen.
- Reduziert Risiken bei großen Zusammenführungen.
Feature Branching:
- Jede Funktion wird in einem separaten Zweig entwickelt.
- Die Zusammenführung erfolgt nur nach Abschluss der Funktion.
- Kann zu "Verstopfung" von Änderungen und komplexen Konflikten beim Zusammenführen führen, wenn die Zweige lange leben.
Beispielcode für TBD (vereinfachte Version):
// Entwicklung erfolgt direkt in main/trunk
public class FeatureA {
public void doStuff() {
// Code der Funktion A
}
}
// Ein anderer Entwickler committet fast gleichzeitig in main/trunk
public class FeatureB {
public void doOtherStuff() {
// Code der Funktion B
}
}
Beispielcode für FB (vereinfachte Version):
// Entwickler 1 arbeitet im Zweig feature/A
// git checkout -b feature/A develop
public class FeatureA {
public void doStuff() {
// Code der Funktion A
}
}
// Entwickler 2 arbeitet im Zweig feature/B
// git checkout -b feature/B develop
public class FeatureB {
public void doOtherStuff() {
// Code der Funktion B
}
}
// Nach Abschluss der Funktion A wird der Zweig in develop zusammengeführt
// git checkout develop
// git merge feature/A
// Nach Abschluss der Funktion B wird der Zweig in develop zusammengeführt
// git checkout develop
// git merge feature/B // Konflikte mit Code aus feature/A möglich