Des commits atomiques ⚛️
Par Maxime Bréhin • Publié le 10 juin 2022

Mise à jour le 23 septembre 2022, 09:51

La qualité des commits est souvent prise à la légère, voire négligée. Pourtant la création de commits dits « atomiques » ⚛️ bénéficie grandement aux projets et à leurs participants. Je t’explique ici ce qu’on entend par « atomique » et quels sont les bénéfices ?

Cet article fait partie de notre série sur le glossaire Git.

Tu préfères une vidéo ?

Si tu es du genre à préférer regarder que lire pour apprendre, on a pensé à toi :

C’est d’la bombe bébé !

Le terme atomique est utilisé ici non pas pour décrire des commits qui feraient exploser notre historique 🤯 mais plutôt l’inverse, à savoir faciliter sa cohérence.

Si on s’en réfère à sa définition Wikipedia, un commit atomique est une opération qui applique un ensemble de changements distincts en une seule opération.

Avec mes mots ça donnerait : un commit atomique représente un ensemble de travail cohérent s’intéressant à un aspect particulier du projet découpé le plus finement possible. Autrement dit, si ta méthode de gestion de projet t’encourage à définir en amont les tâches les plus petites possibles, tu peux considérer que chacune des tâches doit être représentée par un commit.

Les solutions comme GitHub, GitLab, BitBucket et bien d’autres encouragent d’ailleurs ce principe en permettant certaines automatisations entre leur gestion de tickets/issues et nos commits (principalement l’insertion des références des commits et la fermeture automatique de tickets).

Bénéfices

Comme je l’ai énoncé plus haut, les bénéfices sont multiples :

  • l’historique (log) du projet gagne en lisiblité (couplé au bon nommage des commits) ;
  • le réemploi d’un aspect du projet d’un endroit à un autre est facilité (exemple du report de correctif via le cherry-picking, sorte de copier/coller de commit) ;
  • l’analyse du contenu du commit est plus simple et efficace (contrairement à des commits « fourre-tout ») ;
  • la fréquence des commits est plus importante, donnant le sentiment d’un accomplissement plus régulier (il ne faut pas négliger l’aspect psychologique) et permettant un suivi projet efficace.

Parfois « l’effort » fourni pour la bonne mise en œuvre des commits atomiques aura un effet bénéfique sur la méthodologie projet et le management : la mécanique mentale de découpe des aspect au plus près du code sera exploitée en amont, lors de la découpe des tâches à réaliser en réunion d’équipe.

Un exemple simple

Prenons l’exemple d’un projet où je dois afficher un texte à l’utilisateur qui aura plusieurs déclinaisons selon un nombre count passé en paramètre :

  • si count = 0, j’affiche Aucune tâche réalisée
  • si count = 1, j’affiche Une tâche réalisée
  • si count > 0, j’affiche ${count} tâches réalisées

Mon travail va se décliner sous la forme de sous-tâches, chacune représentée par un commit identifiable :

  • création d’une fonction utilitaire de pluralisation et de ses tests ;
  • création et affichage du texte faisant l’appel à cette fonction utilitaire.

Ainsi même sur un sujet en apparence simple, on voit qu’on peut découper en sous-aspects. Le premier commit, celui intégrant la fonction utilitaire, pourra facilement être extrait et exploité ailleurs, sans embarquer la gestion de l’affichage du texte.

Pour ne rien rater de la suite…

Si tu veux être sûr·e de ne rater aucun de nos tutos et articles, tu peux t’abonner à notre newsletter et à notre chaîne YouTube. Tu peux aussi nous suivre sur Twitter. Si tu aimes ce que nous faisons, n’oublie pas de liker, commenter et d’en parler autour de toi 🙂.

Et bien entendu, n'hésite pas à jeter un œil à nos formations ! Si comprendre Git sur le bout des doigts t’intéresse, la Git Total est faite pour toi 😎 !

Découvrez nos cours vidéo ! 🖥

Nos cours vidéo sont un complément idéal et bon marché à nos articles techniques et formations présentielles. Autour de Git, de JavaScript et d’autres sujets, retrouvez des contenus de très grande qualité à des prix abordables, spécialement conçus pour lever vos plus gros points de blocage.