Git flow
Le modèle de branches git-flow
tient en cinq règles et beaucoup de comptabilité. Les règles sont faciles ; c'est
la comptabilité que l'on rate à 18 h un jour de release — fusionner un correctif
urgent dans main en oubliant develop, ou étiqueter la mauvaise branche.
⌘K → Git flow fait la comptabilité.

La disposition
| Branche | Contient |
|---|---|
Branche de production (main) |
Ce qui est en production. Chaque release y est étiquetée. |
Branche d'intégration (develop) |
Là où le travail terminé s'accumule entre deux releases. |
feature/* |
Une unité de travail, issue de develop. |
release/* |
Une version en cours de stabilisation, issue de develop. |
hotfix/* |
Un correctif urgent, issu de main — la production ne peut pas attendre develop. |
Gitcito lit et écrit les mêmes clés de configuration git gitflow.* que la CLI
git flow (gitflow.branch.master, gitflow.prefix.feature, …). Un dépôt sur
lequel quelqu'un a déjà lancé git flow init est reconnu immédiatement, et un
dépôt configuré ici fonctionne ensuite avec la CLI. Gitcito n'exécute que des
commandes git ordinaires — la CLI n'a pas besoin d'être installée.
Configurer écrit ces clés et, si la branche d'intégration n'existe pas encore, la crée depuis la branche de production. Rien d'autre n'est touché. Vous pouvez changer n'importe quel nom ou préfixe plus tard depuis Modifier la disposition.
Démarrer
Choisissez un type, tapez un nom, appuyez sur Démarrer. La boîte de dialogue montre la branche qu'elle s'apprête à créer et la branche depuis laquelle elle sera créée, avant que vous ne vous engagiez :
feature/search from develop
hotfix/1.0.1 from main
Le nom est ce que vous tapez ; le préfixe vient de la disposition.
Terminer
Terminer est la partie qui mérite d'être automatisée, parce qu'elle représente plusieurs étapes qui doivent toutes avoir lieu :
| Type | Ce que fait Gitcito |
|---|---|
| Fonctionnalité | Fusionne dans develop avec --no-ff, supprime la branche, vous laisse sur develop |
| Release | Fusionne dans main, l'étiquette, fusionne dans develop, supprime la branche, vous laisse sur develop |
| Correctif urgent | Fusionne dans main, l'étiquette, fusionne dans develop, supprime la branche, vous laisse sur main |
--no-ff est délibéré : c'est le commit de fusion qui rend la branche visible
dans le graphe par la suite. Sans lui, une fonctionnalité courte
s'évanouit dans une ligne droite et le modèle perd ce pour quoi il existait.
L'étiquette est <préfixe d'étiquette de version><nom> — release/1.1.0 devient
v1.1.0 avec le préfixe par défaut. Décochez Étiqueter la release pour la
sauter, et écrivez un message d'étiquette si vous voulez plus que le contenu par
défaut.
Ce qu'il refuse de faire
- Une copie de travail sale l'arrête. Faites un commit ou un remisage d'abord ; terminer fusionne deux branches et déplace HEAD deux fois, et faire cela autour de travail non validé est la meilleure façon de le perdre.
- Une fusion en conflit annule tout. Si la fusion dans main réussit mais que celle dans develop entre en conflit, vous resteriez sinon avec une release à moitié terminée. Gitcito remet chaque branche là où elle était et signale le conflit. Fusionnez cette branche manuellement, résolvez-la dans le résolveur de conflits, et le reste du flux est à vous de le terminer à la main.
- Il ne pousse jamais. Terminer est une opération locale. Poussez main, develop et la nouvelle étiquette quand vous êtes prêt — voir synchronisation.
Annulation
Un seul Annuler remet tout en place : les deux branches retournent à leurs commits précédents, l'étiquette est supprimée, et la branche terminée est recréée à son ancienne pointe. C'est toute la raison pour laquelle « terminer » peut s'essayer sans crainte.
Quand ne pas l'utiliser
Git flow convient aux logiciels avec des releases versionnées et une branche de
production maintenue. Si vous déployez depuis main plusieurs fois par jour, les
branches de release et de correctif urgent sont une cérémonie dont vous ne vous
servirez pas — les branches empilées ou de simples branches
éphémères issues de main conviennent mieux. La moitié « fonctionnalité » du
modèle, elle, fonctionne très bien toute seule.