Middle
Quelle est la différence entre les approches de Développement basé sur la branche principale et de Branching par fonctionnalité?
sobes.tech IA
Réponse de l'IA
| Critère | Développement basé sur la trunk (TBD) | Branching de fonctionnalités (FB) |
|---|---|---|
| Branche principale | Une branche principale (trunk/main/master) | Plusieurs branches de longue durée (develop, release, master) |
| Fréquence des fusions | Très fréquente (au moins une fois par jour) | Rare (après la fin d'une fonctionnalité) |
| Taille des branches de fonctionnalités | Très courte (de minutes à heures) | Longue durée (jours à semaines) |
| Intégration | L'intégration continue (CI) est essentielle | L'intégration se fait moins fréquemment, peut être plus complexe |
| Risque de conflits | Moins de conflits majeurs, mais plus de petits et fréquents | Plus de conflits majeurs lors de la fusion de grandes branches |
| Temps de déploiement en production | Rapide et fréquent (livraison continue) | Plus lent et moins fréquent |
| Exigences en tests | Niveau élevé d'automatisation des tests | Les tests peuvent être effectués plus tard dans le cycle |
| Taille de l'équipe | Convient mieux aux petites et moyennes équipes, mais évolutif avec discipline | Convient aux grandes équipes |
Développement basé sur la trunk:
- Focus sur une intégration fréquente de petits changements directement dans la branche principale.
- Nécessite une discipline stricte, des tests automatisés et des drapeaux de fonctionnalités pour gérer les versions incomplètes.
- Réduit les risques liés aux grandes fusions.
Branching de fonctionnalités:
- Chaque fonctionnalité est développée dans une branche séparée.
- La fusion ne se produit qu'après la fin de la fonctionnalité.
- Peut conduire à un "enfouillement" de changements et à des conflits complexes lors de la fusion si les branches vivent longtemps.
Exemple de code pour TBD (simplifié):
// Le développement se fait directement dans main/trunk
public class FeatureA {
public void doStuff() {
// Code de la fonctionnalité A
}
}
// Un autre développeur commit dans main/trunk presque en même temps
public class FeatureB {
public void doOtherStuff() {
// Code de la fonctionnalité B
}
}
Exemple de code pour FB (simplifié):
// Le développeur 1 travaille dans la branche feature/A
// git checkout -b feature/A develop
public class FeatureA {
public void doStuff() {
// Code de la fonctionnalité A
}
}
// Le développeur 2 travaille dans la branche feature/B
// git checkout -b feature/B develop
public class FeatureB {
public void doOtherStuff() {
// Code de la fonctionnalité B
}
}
// Après la fin de la fonctionnalité A, la branche est fusionnée dans develop
// git checkout develop
// git merge feature/A
// Après la fin de la fonctionnalité B, la branche est fusionnée dans develop
// git checkout develop
// git merge feature/B // Des conflits avec le code de feature/A peuvent survenir