00:00:00

GIT : Un workflow efficace pour les projets à moyen/long terme

Notes

Qui suis-je ?

  • Développeur Python / Django chez Makina Corpus
  • Mainteneur du codebase et des releases
  • Formateur chez Makina Corpus et au Cnam

Où suis-je

Article original

Notes

Git et ses avantages

Git est un logiciel de gestion de versions disposant de nombreux avantages :

  • Gestion décentralisée

  • Gestion de branches simple et efficace

  • De multiples commandes et options très pratiques

  • Interface en ligne de commande riche

  • Github - Gitlab / Gitorious / ...

Notes

Trouver un workflow qui correspond au contexte du projet

Notes

Contexte

  • Plusieurs développeurs

  • Plusieurs instances de pré-production, plusieurs serveurs de production (versions de code non synchrones)

  • Releases mensuelles avec livraison en pré-production, puis sur le(s) serveur(s) de production

  • Sur les serveurs, la base de code est récupérée depuis le dépôt Git avec Fabric

Notes

Quelques règles

  1. Un (et un seul) mainteneur, qui gère le dépôt Git et les releases

  2. Ne jamais commiter directement sur la branche master

  3. Ne jamais faire de rebase de master sur une autre branche

  4. Ne pas sortir du workflow prévu

Notes

Branche master

  • Contient toute la base de code de la prochaine release

  • Évolue exclusivement par des commits de merge

  • Est en permanence fonctionnelle et fiable

Notes

Branches de développement

1. Nouvelle fonctionnalité / correction = nouvelle branche depuis master

$ (master) git checkout -b featureA
$ (featureA) git commit -a -m "featureA part 1"
$ (featureA) git commit -a -m "featureA part 2"

Workflow 2

2. Suivi de l'évolution de master et vérification régulière que le code fonctionne

$ (featureA) git rebase master

Workflow 3

Notes

Branches de développement

3. Dernier rebase à la fin des développements de la branche pour :

  • s'assurer que le mainteneur pourra merger son code facilement
  • s'assurer que la branche master est toujours pleinement fonctionnelle

4. Merge de la branche de développement sur master par le mainteneur

$ (master) git merge --no-ff featureA

Workflow 4

5. Suppression de la branche de développement

$ (master) git branch -d featureA
$ (master) git push origin :featureA

Notes

Branches stables

1. Taggage de la branche master et création d'une nouvelle branche stable

$ (master) git tag stable1.0
$ (master) git checkout -b stable1.0
$ (stable1.0) git push origin stable1.0

2. Corrections urgentes directement sur la branche stable concernée

Workflow 5

3. Merges réguliers de la branche stable vers master pour récupérer les coorections

$ (master) git merge --no-ff stable1.0

Notes

Historique complet

Workflow 6

Notes

Conclusions

  • La branche master est toujours propre et fonctionnelle
  • Les développeurs n'ont pas à se préoccuper du workflow Git complet
  • Des corrections peuvent être déployées rapidement, sans stress
  • Chaque release stable contient les nouvelles fonctionnalités et les éventuelles corrections
  • Travailler dans des branches systématiquement et utiliser l'option --no-ff permet d'avoir un historique vraiment clair
  • Ce workflow est évolutif (un accroissement du nombre de branches ou de développeurs n'a pas vraiment d'impact)

Notes

Autres solutions

Notes

Notes