Essayer gratuitement
5 min lecture Guide 326 of 877

Automatisation de la Gestion des Branches

La gestion manuelle des branches est sujette aux erreurs et chronophage. Les workflows de branches automatisés assurent un nommage cohérent, nettoient les branches obsolètes et appliquent les standards de l'équipe. Ce guide couvre les stratégies pratiques d'automatisation pour la gestion des branches.

Types d'Automatisation de Branches

AutomatisationBénéficeEffort
Validation du nommageCohérenceFaible
Suppression auto mergedRepo propreFaible
Nettoyage obsolètesMoins de désordreMoyen
Règles de protectionPortes de qualitéFaible
CI par type de brancheBons testsMoyen

Nommage des Branches

Application des Conventions

AUTOMATISATION DU NOMMAGE DES BRANCHES
══════════════════════════════════════

PATTERN DE NOMMAGE :
─────────────────────────────────────
Format standard :
├── type/ticket-description
├── Exemples :
│   ├── feature/AUTH-123-flux-connexion
│   ├── bugfix/BUG-456-null-pointer
│   ├── hotfix/PROD-789-fix-paiement
│   └── chore/DEP-001-update-deps
└── Cohérent, analysable

OPTIONS DE VALIDATION :
─────────────────────────────────────
1. Hook pre-commit :
   #!/bin/bash
   branch=$(git rev-parse --abbrev-ref HEAD)
   pattern="^(feature|bugfix|hotfix|chore)\/[A-Z]+-[0-9]+-"
   if [[ ! $branch =~ $pattern ]]; then
     echo "Nom de branche invalide : $branch"
     exit 1
   fi

2. Check CI :
   - name: Valider nom de branche
     run: |
       if [[ ! "$GITHUB_HEAD_REF" =~ ^(feature|bugfix|hotfix)/ ]]; then
         echo "Nom de branche invalide"
         exit 1
       fi

3. Hook pre-receive (côté serveur) :
   ├── Bloque les branches invalides au push
   └── Application la plus forte

LIEN VERS LES TÂCHES :
─────────────────────────────────────
Extraire le ticket de la branche :
├── Parser le nom de branche
├── Lier la PR à l'issue automatiquement
├── Mettre à jour le statut de la tâche
├── Fermer la tâche au merge
└── Traçabilité complète

Nettoyage Automatique

Gestion du Cycle de Vie des Branches

AUTOMATISATION DU NETTOYAGE DE BRANCHES
═══════════════════════════════════════

SUPPRESSION AUTO AU MERGE :
─────────────────────────────────────
Paramètre GitHub :
├── Settings → General
├── "Automatically delete head branches"
├── Activer ✓
├── Branche supprimée quand PR mergée
├── Pas de nettoyage manuel
└── Repository propre

GitLab :
├── Settings → Repository
├── "Enable auto-delete merged branches"
└── Même comportement

NETTOYAGE BRANCHES OBSOLÈTES :
─────────────────────────────────────
Script pour trouver les branches obsolètes :

# Trouver les branches de plus de 30 jours
for branch in $(git branch -r --merged | grep -v main); do
  last_commit=$(git log -1 --format=%ci "$branch")
  days_old=$(( ($(date +%s) - $(date -d "$last_commit" +%s)) / 86400 ))
  if [ $days_old -gt 30 ]; then
    echo "Obsolète : $branch ($days_old jours)"
  fi
done

NETTOYAGE PLANIFIÉ :
─────────────────────────────────────
GitHub Action :
name: Nettoyage Branches
on:
  schedule:
    - cron: '0 0 * * 0'  # Hebdomadaire
jobs:
  cleanup:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Supprimer branches obsolètes
        run: |
          # Script de nettoyage

Protection des Branches

Règles de Protection

CONFIGURATION PROTECTION DE BRANCHE
═══════════════════════════════════

BRANCHE MAIN/MASTER :
├── ✅ Require pull request before merging
│   └── Au moins 1 approbation
├── ✅ Require status checks to pass
│   ├── CI build
│   ├── Tests
│   └── Linting
├── ✅ Require conversation resolution
├── ✅ Require linear history (optionnel)
├── ✅ Include administrators
└── ❌ Allow force pushes

BRANCHES RELEASE :
├── ✅ Mêmes règles que main
├── ✅ Require signed commits (optionnel)
└── ✅ Restrict who can push

Intégration avec GitScrum

Lier Branches et Tâches

WORKFLOW BRANCHE-TÂCHE
══════════════════════

1. CRÉATION DE TÂCHE
   GitScrum génère un ID : PROJ-123

2. CRÉATION DE BRANCHE
   Développeur : feature/PROJ-123-login-page

3. LIAISON AUTOMATIQUE
   Webhook détecte PROJ-123 dans le nom
   → Tâche mise à jour "En cours"
   → Branche liée à la tâche

4. PULL REQUEST
   Titre : [PROJ-123] Add login page
   → Lien automatique PR ↔ Tâche
   → Tâche "En revue"

5. MERGE
   PR mergée
   → Branche supprimée
   → Tâche "Terminée"
   → Traçabilité complète

Bonnes Pratiques

Conseils d'Automatisation

PratiqueBénéfice
Nommage strictAutomatisation fiable
Suppression autoRepo propre
Protection mainQualité garantie
CI par typeTests appropriés
Notifications obsolètesPas de surprises

Erreurs à Éviter

ANTI-PATTERNS
═════════════

❌ Pas de convention de nommage
└── Impossible d'automatiser

❌ Branches qui vivent trop longtemps
└── Conflits de merge, dette technique

❌ Pas de protection sur main
└── Commits directs, qualité variable

❌ Force push autorisé
└── Historique cassé

❌ Nettoyage manuel uniquement
└── Accumulation de branches mortes

Solutions Connexes