--- title: "Git Workflow (Git Flow)" type: operation sources: - sources/archives/Gestion_versions_projet_GIT.md related: - operations/development-methodology.md - operations/git-branch-lifecycle.md - operations/custom-application-management.md - operations/deployment-existing-app.md - operations/deployment-specific-commit.md - operations/gna-services-license.md - operations/ssh-keys-setup.md - operations/ugna-data-export.md - operations/code-review-process.md last_compiled: "2026-04-17" --- # Git Workflow (Git Flow) ## Overview Workflow **Git Flow** appliqué aux projets EasyWMS France. Git Flow est une extension de Git qui impose un workflow structuré et uniformise la gestion des branches (features / bugfixes / releases / hotfixes / support). Il complète la stratégie de branches décrite dans [development-methodology](development-methodology.md) en donnant la procédure opérationnelle (commandes CLI et SourceTree) : - Initialiser le dépôt - Créer / basculer sur une feature - Committer ses développements (y compris export CustomApp + export uGNA + sauvegarde GNA) - Clôturer la feature avec rebase sur `develop` - Gérer les conflits La gestion est expliquée en parallèle via **invite de commande (CLI)** et **[SourceTree](https://easywmsfrance.atlassian.net/wiki/spaces/EF/pages/3000088854571)** (configuré en anglais). Source : Confluence EasyWMS France - *Gestion des versions du projet avec GIT* (v27, 22/08/2025). ### Ressources externes - [Équivalences git ↔ git flow](https://gist.github.com/JamesMGreene/cdd0ac49f90c987e45ac) - [Git flow cheat sheet](http://danielkummer.github.io/git-flow-cheatsheet/) ## 1. Initialiser le projet en local ### Clone **CLI :** ```bash cd git clone ``` **SourceTree :** bouton "Clone" → renseigner l'URL du repo. > L'URL du repo GIT se trouve dans l'interface de gestion du projet (bouton "Clone" / "Code" selon la plateforme). ### Initialiser Git Flow **CLI :** ```bash git flow init -d \ --feature feature/ \ --bugfix bugfix/ \ --release release/ \ --hotfix hotfix/ \ --support support/ \ -t '' git push --set-upstream origin develop ``` **SourceTree :** icône Git Flow → **ne rien modifier** dans la fenêtre de configuration → **OK**. ## 2. Créer une nouvelle feature / branche ### Récupérer les derniers commits **CLI :** ```bash git pull ``` **SourceTree :** bouton **"Pull"**. ### Démarrer la feature **CLI :** ```bash git flow feature start # Ex : git flow feature start PD-49 ``` **SourceTree :** icône Git Flow → **"Start New Feature"** → saisir le nom. ### Déployer la VM sur la nouvelle branche 1. Appliquer le point de contrôle **"DEPLOY 0"** sur la VM (cf. [vm-installation](vm-installation.md#7-point-de-contrôle-deploy-0)) 2. Déployer la branche : cf. [deployment-existing-app](deployment-existing-app.md) > Si une pop-up de connexion apparaît sur SmartUI après déploiement : [procédure dédiée Confluence](https://easywmsfrance.atlassian.net/wiki/spaces/EF/pages/3000144789544) Vous êtes prêt à commencer vos développements. ✅ ## 3. Commit de vos modifications ### Étape préalable - exporter les modifications Avant tout commit, exporter **tout ce qui a été modifié** : 1. **Custom app** → cf. [custom-application-management - Export](custom-application-management.md#export) 2. **Paramètres / config WMS modifiés** → export datas via **[uGNA](ugna-data-export.md)** (procédure complète avec liste des entités et erreurs droits) 3. **Fichiers BOO du GNA modifiés** → exécuter [`GNAGetDataForGit.ps1`](gna-services-license.md#sauvegarder-la-configuration-sur-le-git) ### Commit + push **CLI :** ```bash # Ajouter tout ce qui est modifié git add . # Ou fichier par fichier git add # Commit avec message explicite git commit -m "" # Push git push ``` **SourceTree :** 1. **"Commit"** (haut à gauche) 2. **"Stage all"** ou drag & drop / "Stage selected" 3. Écrire le message de commit 4. **"Commit"** 5. Pour push simultané : cocher **"Push changes immediately"** > ℹ️ Les fichiers générés par l'export de la custom app sont **séparés en plusieurs fichiers** pour un même élément (workflow, source C#, DESIGN…). Bien prendre **tous** les fichiers portant le nom de l'élément modifié. > ⚠️ **Règle absolue : commit et push ses développements tous les soirs avant de quitter les bureaux** - évite toute perte (perte/vol/casse du PC). ## 4. Fin de la tâche de développement Une fois développements **testés et validés**, clôturer la branche. ### 4.1 Mettre à niveau `develop` **CLI :** ```bash git switch develop git pull ``` **SourceTree :** double-clic sur la branche `develop` → **"Pull"**. ### 4.2 Clôturer la feature **CLI :** ```bash git flow feature finish -r git push # Ex : git flow feature finish -r PD-49 ``` **SourceTree :** 1. Icône Git Flow → sélectionner la feature 2. ✅ Cocher **"Rebase on development Branch"** 3. Valider → **"Push"** ### 4.3 Gérer les conflits Si le rebase lève des conflits : 1. Ouvrir les fichiers en conflit (**VSCode** recommandé) et les résoudre **CLI :** ```bash git add git rebase --continue # Répéter pour chaque commit jusqu'à la fin du rebase # Puis recommencer la clôture de la feature ``` **SourceTree :** 1. **Ne pas faire de commit** - uniquement **"stage"** les fichiers résolus 2. **"Continue Rebase"** 3. Répéter pour chaque commit de `develop` 4. Recommencer la clôture de la feature - cette fois **sans cocher "Rebase"** ### 4.4 Mettre à jour Jira Passer le ticket à **"Revue de code"**. ## Checklist journalière - ☐ `git pull` en début de journée sur votre branche - ☐ Commits petits et explicites tout au long de la journée - ☐ **Avant commit** : export custom app + uGNA + GNA (si concerné) - ☐ **Soir** : tous les commits poussés sur le remote (**règle absolue**) - ☐ Avant clôture : `develop` à jour + rebase réussi ## Parameters / Branches Git Flow | Type | Préfixe | Source | Destination | Objet | |------|---------|--------|-------------|-------| | Feature | `feature/` | `develop` | `develop` | Développements courants (ex : `feature/PD-49`) | | Bugfix | `bugfix/` | `develop` | `develop` | Corrections de bugs sur le développement en cours | | Release | `release/` | `develop` | `master` + `develop` | Préparation d'une release | | Hotfix | `hotfix/` | `master` | `master` + `develop` | Correctifs urgents en production | | Support | `support/` | `master` | - | Maintien d'une version antérieure | ## Common errors - **Pop-up de connexion SmartUI** après déploiement sur nouvelle branche → procédure dédiée Confluence (pas traité ici). - **Perte de travail suite à casse PC** → n'a pas respecté la règle du push de fin de journée. Règle **absolue**. - **Rebase qui répète les mêmes conflits** → normal : `git flow feature finish -r` rejoue chaque commit. Résoudre, stage, `continue`, recommencer. - **SourceTree re-clôture et re-rebase** → après résolution manuelle des conflits, relancer la finalisation **sans cocher "Rebase"** (c'est l'étape 4.3 → 4.2). - **Fichiers custom app manquants après commit** → stager **tous** les fichiers (workflow + C# + DESIGN séparés). Faire un `git status` avant commit pour vérifier. - **Conflits systématiques sur le manuel de reten DOC** → utiliser Markdown pendant le dev, conversion DOC uniquement en fin de chantier (cf. [development-methodology](development-methodology.md)). - **Push refusé ("non-fast-forward")** → `git pull --rebase` sur votre branche avant de re-push. ## Related - [Development Methodology](development-methodology.md) - cadre général (branches `master`/`développement`/`post-production`, phases dev/test/post-prod) - [Git Branch Lifecycle](git-branch-lifecycle.md) - gouvernance par phase de projet (Dev / MEP / Hypercare / TLM / TMA), rôles Dev/CdP/Support/TMA - [SSH Keys Setup (MSSCODE & Sourcetree)](ssh-keys-setup.md) - clé SSH ed25519 pour ne plus saisir les identifiants MSSCODE - [Custom Application Management](custom-application-management.md) - export/import systématique avant commit - [uGNA Data Export](ugna-data-export.md) - export config WMS via `uGNAConsole.exe -Z:` (étape pré-commit) - [Code Review Process](code-review-process.md) - revue Code/Fonctionnel/Documentation avant `Finish Feature` - [Deploy Existing Application](deployment-existing-app.md) - déploiement après pull ou changement de branche - [Deploy Specific Commit](deployment-specific-commit.md) - figer un commit pour démo / debug - [GNA, Services & License](gna-services-license.md) - sauvegarde GIT des scripts BOO avant commit