You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
11 KiB
11 KiB
🔀 Git Workflow - Guide des Bonnes Pratiques
Ce document décrit le workflow Git utilisé pour le projet BricoLoc Architecture Evolution.
📋 Stratégie de Branching
Nous utilisons une variante simplifiée de Git Flow adaptée à un projet académique.
Branches Principales
main (production)
↓
develop (développement)
↓
feature/* (fonctionnalités)
main
- Protection : ✅ Protégée (pas de push direct)
- Contenu : Code stable, déployable
- Merge : Uniquement depuis
developvia Pull Request - Tags : Versions (v1.0.0, v2.0.0, etc.)
develop
- Protection : ⚠️ Semi-protégée (PR recommandées)
- Contenu : Code en développement actif
- Merge : Depuis
feature/*branches
feature/*
- Nomenclature :
feature/<nom-descriptif> - Durée de vie : Courte (1-5 jours max)
- Base : Créée depuis
develop - Merge : Vers
developvia Pull Request
🚀 Workflow Complet
Étape 1 : Créer une Feature Branch
# S'assurer d'être sur develop et à jour
git checkout develop
git pull origin develop
# Créer une nouvelle feature branch
git checkout -b feature/auth-service
# Vérifier la branche active
git branch
Nomenclature des branches :
feature/auth-service✅feature/catalogue-crud✅feature/reservation-flow✅fix/inventory-bug✅docs/update-readme✅refactor/clean-architecture✅
❌ À éviter :
feature/test(trop vague)my-branch(pas de préfixe)feature-auth(utiliser/pas-)
Étape 2 : Développer
# Faire des modifications
code packages/microservices/auth/src/
# Vérifier les fichiers modifiés
git status
# Ajouter les fichiers (sélectif)
git add packages/microservices/auth/
# OU ajouter tout
git add .
Étape 3 : Committer
Format des messages de commit (Conventional Commits) :
<type>(<scope>): <subject>
<body (optionnel)>
<footer (optionnel)>
Types :
feat: Nouvelle fonctionnalitéfix: Correction de bugdocs: Documentationstyle: Formatage (pas de changement de code)refactor: Refactoring (pas de nouvelle feature)test: Ajout de testschore: Tâches diverses (config, deps)
Exemples :
# Feature
git commit -m "feat(auth): add user registration use case"
# Fix
git commit -m "fix(inventory): resolve stock availability bug"
# Docs
git commit -m "docs(readme): update setup instructions"
# Refactor
git commit -m "refactor(reservation): apply repository pattern"
# Avec body
git commit -m "feat(auth): implement OAuth Google login
- Add Supabase Auth provider configuration
- Create OAuth callback route
- Add Google button to login page"
✅ Bons commits :
feat(catalogue): implement search with filters
fix(reservation): prevent double-booking
docs(adr): add ADR-006 for database choice
refactor(inventory): extract business logic to service layer
test(auth): add unit tests for RegisterUser use case
❌ Mauvais commits :
fix bug # Trop vague
update # Pas de contexte
WIP # Work In Progress (à éviter sur develop/main)
asdfasdf # Non descriptif
Fixed everything # Trop général
Étape 4 : Push vers Remote
# Premier push (créer la branche remote)
git push -u origin feature/auth-service
# Pushs suivants
git push
Étape 5 : Créer une Pull Request
Sur GitHub :
- Aller sur le repository
- Cliquer sur "Pull Requests" > "New Pull Request"
- Base :
develop← Compare :feature/auth-service - Remplir le template (voir ci-dessous)
- Assigner des reviewers (si équipe > 1)
- Créer la PR
Template de Pull Request :
## Description
Implémentation du Auth Service avec Clean Architecture.
## Type de changement
- [x] Nouvelle fonctionnalité (feature)
- [ ] Correction de bug (fix)
- [ ] Documentation
- [ ] Refactoring
## Changements
- ✅ Ajout de `RegisterUser` use case
- ✅ Ajout de `SupabaseAuthRepository`
- ✅ Tests unitaires (85% coverage)
- ✅ API Route `/api/auth/register`
## Checklist
- [x] Le code compile sans erreurs
- [x] Les tests passent (`pnpm test`)
- [x] Le linting passe (`pnpm lint`)
- [x] La documentation est à jour
- [x] J'ai testé manuellement
## Captures d'écran (si applicable)

## Issues liées
Closes #42
Related to #38
Étape 6 : Review & Merge
Si vous êtes seul :
- Relire votre code
- Vérifier les tests
- Merger la PR
# Via GitHub UI : "Merge Pull Request" > "Squash and Merge"
Si en équipe :
- Attendre review
- Faire les modifications demandées
- Re-push
# Après review, modifications demandées
git add .
git commit -m "refactor(auth): apply review feedback"
git push
Étape 7 : Supprimer la Feature Branch
# Après merge, supprimer la branche locale
git checkout develop
git branch -d feature/auth-service
# Supprimer la branche remote (si pas fait automatiquement)
git push origin --delete feature/auth-service
# Mettre à jour develop
git pull origin develop
🔄 Workflow Quotidien
Démarrer la Journée
# Mettre à jour develop
git checkout develop
git pull origin develop
# Créer/reprendre une feature branch
git checkout feature/ma-feature
# OU
git checkout -b feature/nouvelle-feature
Pendant le Développement
# Commits fréquents (toutes les 30min - 2h)
git add .
git commit -m "feat(scope): descriptive message"
# Push régulièrement (fin de session)
git push
Fin de Journée
# Push final
git add .
git commit -m "feat(scope): progress on feature X"
git push
# Vérifier le statut
git status
🔧 Commandes Git Utiles
Vérifier l'État
# Statut actuel
git status
# Différences non staged
git diff
# Différences staged
git diff --cached
# Historique
git log --oneline --graph --all
Annuler des Changements
# Annuler modifications non staged (fichier spécifique)
git restore <file>
# Annuler modifications non staged (tous les fichiers)
git restore .
# Annuler un fichier staged
git restore --staged <file>
# Annuler le dernier commit (GARDE les modifications)
git reset --soft HEAD~1
# Annuler le dernier commit (SUPPRIME les modifications)
git reset --hard HEAD~1
Stash (Mettre de Côté)
# Mettre de côté les modifications actuelles
git stash
# Lister les stash
git stash list
# Récupérer le dernier stash
git stash pop
# Récupérer un stash spécifique
git stash apply stash@{0}
# Supprimer un stash
git stash drop stash@{0}
Rebase (Mettre à Jour depuis develop)
# Sur votre feature branch
git checkout feature/ma-feature
# Rebase sur develop (mettre à jour)
git fetch origin
git rebase origin/develop
# Si conflits, résoudre puis :
git add .
git rebase --continue
# Forcer le push (ATTENTION : seulement sur votre feature branch)
git push --force-with-lease
Cherry-Pick (Appliquer un Commit Spécifique)
# Récupérer un commit d'une autre branche
git cherry-pick <commit-hash>
🛡️ Règles Importantes
✅ À FAIRE
- ✅ Commits fréquents et atomiques
- ✅ Messages de commit descriptifs
- ✅ Pull Request pour toute feature
- ✅ Tester avant de push
- ✅ Rebase pour mettre à jour depuis develop
- ✅ Supprimer les branches mergées
❌ À ÉVITER
- ❌ Push direct sur
mainoudevelop - ❌ Commits vagues ("fix", "update")
- ❌ Feature branches qui durent > 1 semaine
- ❌ Force push sur
mainoudevelop - ❌ Merge conflicts non résolus
- ❌ Code non testé
🚨 Gestion des Conflits
Scénario : Conflit lors du Rebase
# 1. Lancer le rebase
git rebase origin/develop
# 2. Git indique des conflits
# CONFLICT (content): Merge conflict in file.ts
# 3. Ouvrir les fichiers en conflit dans VS Code
code .
# 4. Résoudre les conflits (VS Code affiche les markers)
# <<<<<<<
# votre code
# =======
# code de develop
# >>>>>>>
# 5. Choisir la version à garder ou combiner
# 6. Marquer comme résolu
git add file.ts
# 7. Continuer le rebase
git rebase --continue
# 8. Si tout est OK, force push
git push --force-with-lease
Scénario : Conflit lors du Merge
# 1. Merger develop dans votre branche
git merge develop
# 2. Résoudre les conflits (même process)
# 3. Commit de merge
git commit -m "merge: resolve conflicts with develop"
# 4. Push
git push
📊 Git Flow Visuel
main ─────o─────────────────o───────────→
│ │
│ │ (PR merge)
│ │
develop ─────o─────o───────o───o───────o───→
│ │ │
│ │ │
feature/A ────o───o───o │
│ │
(PR) │
│
feature/B ────o───o───o
│
(PR)
Légende :
o: Commit→: Timeline│: Branches(PR): Pull Request merge
📝 Exemple Complet
Cas d'Usage : Implémenter Catalogue Service
# 1. Setup
git checkout develop
git pull origin develop
git checkout -b feature/catalogue-service
# 2. Développement (Jour 1)
# ... créer fichiers ...
git add packages/microservices/catalogue/
git commit -m "feat(catalogue): add domain entities and interfaces"
git push -u origin feature/catalogue-service
# 3. Développement (Jour 2)
# ... implémenter use cases ...
git add .
git commit -m "feat(catalogue): implement search outils use case"
git push
# 4. Développement (Jour 3)
# ... tests ...
git add .
git commit -m "test(catalogue): add unit tests for SearchOutils"
git push
# 5. Mise à jour depuis develop (si besoin)
git fetch origin
git rebase origin/develop
git push --force-with-lease
# 6. Créer Pull Request sur GitHub
# ... remplir template ...
# 7. Merger (après review/tests)
# Via GitHub UI
# 8. Cleanup
git checkout develop
git pull origin develop
git branch -d feature/catalogue-service
🔗 Ressources
- Conventional Commits : https://www.conventionalcommits.org/
- Git Flow : https://nvie.com/posts/a-successful-git-branching-model/
- Atlassian Git Tutorials : https://www.atlassian.com/git/tutorials
Dernière mise à jour : Octobre 2025