Des commits GIT alimentés par ajouts de lignes avec Visual Studio Code !

Antoine Regembal
Just-Tech-IT
Published in
5 min readMar 24, 2021
https://git-scm.com

TL; DR

Si vous ne commitez jamais au fur et à mesure et quand arrive le moment fatidique de pousser votre code vous ne savez pas comment rattraper ça, vous êtes au bon endroit !

Cette manipulation vous permet de créer des commits plus finement qu’en ajoutant des fichiers entiers qui peuvent contenir plusieurs scopes de modifications à la fois. Pour résumer :

  • Sélectionner un fichier modifier dans l’onglet de gestion des sources de Visual Studio Code,
  • Sélectionner la portion de code désirée à ajouter au commit *,
  • CTRL+K CTRL+ALT+S *,
  • Commiter uniquement les lignes sélectionnées.

*actions répétables pour alimenter le commit.

Des commits alimentés par ajouts de lignes ?

Saviez-vous que Visual Studio Code, l’éditeur de code open source de Microsoft, vous permet de créer facilement des commits non pas par fichiers entiers comme nous avons l’habitude de le faire mais en ajoutant seulement certaines portions des modifications apportées à un ou plusieurs fichiers ?

Evidemment, nous avons déjà été nombreux à être confrontés à ce problème de tester la faisabilité d’une évolution dans le code existant de notre application et d’arriver assez rapidement à un résultat satisfaisant pouvant être poussé sur la branche de développement du projet.

Seulement, les évolutions apportées peuvent très vite toucher à beaucoup de scopes différents : refactorisation, écriture de classes ou d’interfaces, implémentation de nouvelles règles métiers, écriture des tests, correction de failles de sécurité, stylisation de composants, …

A ce moment là, il devient souvent difficile de trouver un découpage à la fois précis et cohérent par fichiers afin de créer nos commits et d’avoir un historique GIT propre, surtout si plusieurs scopes de modifications distincts ont eu lieux dans un seul et même fichier.

C’est là qu’interviennent les commits alimentés par ajouts de lignes !

Les commits c’est comme le cable management, si c’est bien fait on retrouve facilement d’où ça vient et à quoi ça sert, sinon … grosse galère …
Les commits c’est comme le cable management, si c’est bien fait on retrouve facilement d’où ça vient et à quoi ça sert, sinon … grosse galère en cas de pépins

Un cas d’usage

Cas d’usage fictif avec multiples modifications sur un même fichier
Cas d’usage fictif avec multiples modifications sur un même fichier

Prenons en exemple la capture d’écran ci-dessus d’un cas d’usage fictif :

Dans un même fichier déjà existant, deux évolutions distinctes ont été apportées afin de répondre à un nouveau besoin et nous avons également appliqué un des principes du clean code en laissant le fichier dans un état “plus propre” qu’à notre arrivée grâce à l’application de la règle du Boy Scout.

Quel pourrait être le message de commit lié à ces modifications si l’on en venait à commiter tout ce fichier d’un seul coup ? (Avec l’utilisation de la convention de nommage des commits d’angularJS !)

git commit -m “feat(myScope): Le champ du chiffre d’affaire est maintenant mappé, également ajout d’un tri complexe sur la liste des garanties additionnelles de la page de tarification, boyscout sur le fichier avec la diminution de la complexité des méthodes utilitaires.”

Déjà le type du commit (feat) n’est pas bon car une des modifications ne porte pas sur l’ajout d’une feature mais sur la refactorisation (refactor) du code du fichier. Ensuite … ce message de commit est bien trop long et complexe et la granularité de découpage de ce commit laisse bien à désirer.

Découpage par lignes : c’est parti !

Pour être plus précis dans notre découpage nous pouvons créer des commits par ajouts de lignes très simplement avec Visual Studio Code. Voici la marche à suivre :

Sélection du code à envoyer dans un premier commit
Sélection du code à envoyer dans un premier commit

Dans l’onglet de gestion des sources de Visual Studio Code, sélectionner le fichier modifié et dans le panel de droite (le panel des modifications apportées) sélectionner la portion de lignes que vous souhaitez intégrer à un premier commit.

Il faut ensuite cliquer sur le bouton représenté par les “…” en haut à droite de la fenêtre.

Ajouter les lignes sélectionnées à l’enveloppe du commit à venir
Ajouter les lignes sélectionnées à l’enveloppe du commit à venir

La liste déroulante qui apparaitra vous permettra d’ajouter les lignes sélectionnées en mode “staged”, c’est à dire prêtes à être ajoutées à un commit. Vous pouvez effectuer cette action autant de fois que nécessaire pour ajouter toutes les lignes portants sur un même scope de modifications, qu’elles se trouvent sur le même fichier ou sur d’autres (voire mixer la sélection par ligne et l’ajout de fichiers entiers !).

Comme vous pouvez également le constater sur la capture d’écran précédente, cette manipulation vous permet également d’annuler des modifications apportées sur certaines lignes d’un fichier ou de retirer des lignes de l’enveloppe du commit en préparation.

Les lignes sélectionnées ont été ajoutées à l’enveloppe du commit à venir
Les lignes sélectionnées ont été ajoutées à l’enveloppe du commit à venir

Vous remarquerez alors que les lignes sélectionnées ont été ajoutées dans la partie “Staged Changes” de l’onglet de gestion des sources de Visual Studio Code.

Il ne vous reste plus qu’à commiter les premières modifications !

git commit -m “feat(myScope): Le champ du chiffre d’affaire est maintenant mappé.”

D’effectuer la même opération pour les autres modifications …

git commit -m “feat(myScope): Ajout d’un tri complexe sur la liste des garanties additionnelles de la page de tarification.”

git commit -m “refactor(myScope): Boyscout sur le fichier avec la diminution de la complexité des méthodes utilitaires.”

Et de pousser vos nouveaux commits !

Résultat : Un historique de commits propre

En plus d’avoir un historique propre, la granularité des découpages est optimale.

Par exemple, en cas de régressions apportées par nos développements, il serait alors très facile de trouver quel commit est impactant, et de le revert unitairement ou de le cherry-pick sans retirer le reste du code modifié qui lui, fonctionne correctement.

୧( ͡◉ل͜ ͡◉)୨

Si vous souhaitez aller plus loin sur vos pratiques GIT, je vous conseille cet autre article écrit par Geoffrey Gourlez sur “Git Commit Fixup, ou comment garder un historique propre” !

--

--