Git Flow vs Trunk-Based Development Comparaison

Une stratégie de branches structurée — main, develop, feature, release, hotfix

VS
Trunk-Based Development

Une seule branche principale, commits fréquents, déploiement sécurisé via feature flags

8 min de lectureAraçlar

Comparaison des scores

Chargement du graphique...

Notation détaillée

Notation détaillée: Git Flow et Trunk-Based Development — notes sur 10, catégorie par catégorie
CatégorieGit FlowTrunk-Based Development
Performance
6/10
9/10
Facilité d'apprentissage
5/10
7/10
Écosystème
8/10
9/10
Communauté
8/10
9/10
Marché de l'emploi
8/10
9/10
Pérennité
5/10
10/10

Avantages & Inconvénients

Git Flow

Avantages

  • Cycles de release clairs — on sait précisément quand quoi sera publié
  • Développement en parallèle — plusieurs fonctionnalités peuvent avancer simultanément
  • Mécanisme de hotfix — processus de correction urgente en production
  • Apporte de la structure pour la coordination dans les grandes équipes
  • Bonne compatibilité avec le versionnage sémantique
  • Compatible avec les cycles de release des applications mobiles (processus de revue App Store)

Inconvénients

  • Complexe — 5 types de branches, il faut apprendre les stratégies de merge
  • Les branches à longue durée de vie créent un cauchemar de conflits de merge
  • Itérations lentes — le processus develop → release → main ajoute du retard
  • Intégration complexe avec le CI/CD
  • Les branches de fonctionnalité peuvent s'étirer sur des semaines — enfer d'intégration
  • Surcharge excessive pour les petites équipes

Idéal pour

Produits avec des cycles de release planifiés (application mobile, firmware)Grandes équipes distribuéesGestion des releases sur App Store / Play StoreProduits nécessitant un support de versions parallèlesLogiciels d'entreprise nécessitant conformité et audit

Trunk-Based Development

Avantages

  • Simple — une seule branche main/trunk, branches de courte durée
  • Intégration continue — tout le monde pousse sur le trunk plusieurs fois par jour
  • Conflits de merge minimisés — les branches ne vivent pas plus d'1-2 jours
  • Boucle de rétroaction rapide — le CI s'exécute instantanément
  • Séparation deploy/release grâce aux feature flags — dark launch sécurisé
  • Stratégie utilisée par des entreprises comme Google, Facebook, Netflix
  • Alignement naturel avec le DevOps et le CI/CD

Inconvénients

  • La gestion des feature flags nécessite une infrastructure supplémentaire
  • Tout le monde doit pousser sur le trunk chaque jour — la discipline est essentielle
  • Moins adapté aux cycles de release planifiés
  • Les fonctionnalités inachevées vivent sur le trunk — la gestion des flags est critique
  • Risqué sans une infrastructure CI/CD solide et une bonne couverture de tests
  • Difficile à appliquer pleinement en mobile à cause du processus de revue App Store

Idéal pour

Services web et produits SaaSÉquipes à itération élevée, petites à moyennesOrganisations disposant d'un pipeline CI/CD robusteCeux qui visent le déploiement continu (continuous deployment)Produits disposant d'une infrastructure de feature flags

Comparaison de code

Git Flow
# Git Flow - Exemple de workflow complet
# Configuration initiale
git flow init -d
# Branches : main, develop, feature/, release/, hotfix/

# Développement d'une nouvelle fonctionnalité
git flow feature start user-profile-redesign
# → la branche feature/user-profile-redesign est créée

# Processus de développement
git add src/views/ProfileView.swift
git commit -m "feat(profile): redesign user profile card"
git add src/viewmodels/ProfileViewModel.swift
git commit -m "feat(profile): add avatar lazy loading"

# Fonctionnalité terminée — fusionner dans develop
git flow feature finish user-profile-redesign
# → la branche feature est supprimée, fusionnée dans develop

# Préparation de la release
git flow release start 2.4.0
# → la branche release/2.4.0 est créée

# Sur la branche release, uniquement des corrections de bugs !
git commit -m "fix: avatar cache invalidation on logout"
git commit -m "chore: bump version to 2.4.0"

# Release terminée
git flow release finish 2.4.0
# → fusion dans main, tag créé (v2.4.0), fusion retour dans develop

# Détection d'un incident en production
git flow hotfix start fix-crash-on-launch
git commit -m "fix: nil pointer in AppDelegate startup"
git flow hotfix finish fix-crash-on-launch
# → fusion dans main et develop, tag v2.4.1
Trunk-Based Development
# Trunk-Based Development - Workflow quotidien

# Chaque matin : démarrer à jour
git pull origin main

# Branche de fonctionnalité courte (max 1-2 jours !)
git checkout -b feat/quick-login-improvement

# Commits petits et atomiques
git add src/views/LoginView.swift
git commit -m "feat: add biometric login button"

git add tests/LoginTests.swift
git commit -m "test: biometric auth unit tests"

# Fusion immédiate dans le trunk (même incomplet, grâce au feature flag !)
git checkout main
git pull origin main
git merge feat/quick-login-improvement
git push origin main
git branch -d feat/quick-login-improvement

# Masquer une fonctionnalité incomplète avec un feature flag (Swift)
# FeatureFlags.swift
enum FeatureFlag: String {
    case newLoginUI = "new_login_ui"
    case profileV2 = "profile_v2"
    case darkModeV3 = "dark_mode_v3"
}

class FeatureFlagService {
    static func isEnabled(_ flag: FeatureFlag) -> Bool {
        // Lire depuis remote config ou un override local
        return RemoteConfig.shared.bool(forKey: flag.rawValue)
    }
}

// Utilisation dans la vue
if FeatureFlagService.isEnabled(.newLoginUI) {
    NewLoginView()
} else {
    LegacyLoginView()
}

# Pipeline CI/CD (GitHub Actions)
# .github/workflows/ci.yml :
# on: push (branches: [main])
# → lint → test → build → deploy staging → smoke test → deploy production

Conclusion

Pour les services web et produits SaaS, Trunk-Based Development est le standard moderne — excellente compatibilité CI/CD, itération rapide. Pour les applications iOS, une version allégée de Git Flow (uniquement main + branches de fonctionnalité) est pratique : le processus de revue de l'App Store et les cycles de version s'adaptent mieux à cette structure. GitHub Flow (main + branches de fonctionnalité de courte durée) constitue un bon compromis.

Obtenir une consultation gratuite
FAQ

Questions fréquentes

GitHub Flow est une version simplifiée : il n'y a que les branches main et feature. Pas de branche release, pas de branche develop. Un compromis idéal pour les équipes petites à moyennes.

Articles de blog associés

Voir tous les articles

Projets associés

Voir tous les projets
Toutes les comparaisons