Sobes.tech
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