Industrialisation logicielle : les avantages de Git et le Git-Flow

Parce que le développement software n’échappe pas aux exigences d’industrialisation, le Tarmac organisait le 5 mars dernier un atelier animé par Cédric Foellmi (F52 Technologies), expert en industrialisation logicielle, sur l’utilisation de Git et du Git-Flow.

L’utilisation de Git et du Git-Flow.

Créé par le créateur de Linux en 2005, Git est un outil puissant de versioning opensource qui présente de nombreux avantages, dont celui de conserver l’intégralité des fichiers à chaque version (et pas seulement les modifications, garantissant ainsi l’intégrité des données), et surtout d’être distribué. Ne nécessitant pas obligatoirement de serveur central, il permet ainsi de travailler localement, hors ligne, et des opérations normalement coûteuses, comme faire des branches, deviennent instantanées.

Parmi les fonctionnalités à retenir :

  • Un dépôt git est toujours cloné entièrement, permettant ainsi un accès à tout l’historique.
  • La sauvegarde se fait en 3 étapes, les fichiers passant par 3 états:
    • Modifié : le fichier est détecté comme ayant des modifications par rapport à sa sauvegarde précédente.
    • Staged : le fichier est “mis à l’index” dans l’aire de “staging” et donc comme faisant partie du prochain commit.
    • Committé : le fichier modifié est enregistré dans la chaîne de commits.
  • Il est possible de dire à Git d’ignorer certains fichiers. C’est particulièrement important à propos de certaines données qui ne doivent jamais apparaître dans le dépôt, comme les fichiers qui contiennent les mots de passe et les données environnementales.

Quant au Git-Flow, c’est une bonne pratique courante. Il permet de travailler plus efficacement, en assignant des rôles différents à des branches avec un nom spécifique :

  • La branche “master” est celle des délivrables client
  • La branche “develop” est la branche principale de développement sur laquelle sont fusionnées les évolutions des autres branches par l’ensemble des développeurs de l’équipe projet
  • Les branches de “feature/<nom de la feature>” permettent de développer les fonctionnalités souhaitées
  • La branche “release” est dédiée aux pré-livraisons et permet de tester si tout est OK
  • La branche “hotfix” est dédiée aux corrections urgentes.

Le Git-Flow est vivement conseillé, même lorsqu’on développe seul, parce qu’il :

  • permet de mettre en place tout de suite des bonnes pratiques de développement,
  • prépare la mise en place des usines logicielles qui permettront d’automatiser progressivement les développements,
  • permet de livrer des correctifs en un temps record sans risquer de désorganiser tout le système !

Workshop Git et Git Flox au TarmacQuelques conseils pratiques à l’usage des développeurs :

  • Préférer les commits réguliers : un flow permanent de petites évolutions de features est à la fois plus simple et moins risqué
  • Quand on travaille sur une branche de feature au sien d’une équipe importante qui fait évoluer en parallèle la branche develop, il est vivement conseillé de fusionner régulièrement la branche Develop sur sa branche de feature avant de merger ses propres évolutions vers la branche develop pour s’assurer que tout fonctionne
  • Quand on souhaite garder des modifications qu’on ne souhaite pas comitter (ou pas tout de suite), utiliser le Stash (qui est un espace de stockage temporaire sans effet sur les commits).
  • Les tags permettent d’assigner un nom à un commit. Il sont particulièrement utiles si l’on adopte également les principes de versioning sémantiques (Vx.y.z où x = nouvelles API donc changement majeur, y = nouvelles features, changement mineur, et z = patchs). Ce principe permet de programmer les gestionnaires de dépendances pour, par exemple, accepter systématiquement les patches mais pas les changements majeurs.

Un dépôt git contient toujours un répertoire “.git”. Il s’y trouve notamment le répertoire “hooks” qui permet d’enregistrer des scripts associés à des événements. C’est ici que peut débuter des automatisations de déploiement pour les usines logicielles.

Enfin, il convient de bien choisir sa plateforme collaborative (ex Gitlab, Github, Bitbucket), et son client (Tower, Sourcetree, GitUp, etc)

Pour aller plus loin avec les slides de Cédric : https://gitpitch.com/F52/git-starter-fr/ ainsi que les dépôts d’exercice: https://github.com/F52

Et surtout, RDV en juin pour une journée d’échanges sur les bonnes pratiques en matière d’industrialisation logicielle : date et programme en cours ?