Introduction
Les développeurs connaissent tous les frustrations liées à l'utilisation de Git, notamment la gestion des modifications de fichiers, la création de branches et la résolution des conflits. C'est là que JJ intervient, un système de contrôle de version conçu pour simplifier ces processus.
Contexte Technique
Git a été créé en 2005 avec un modèle mental spécifique, comprenant un répertoire de travail, une zone d'étape (l'index) et des validations. Cependant, ce modèle peut créer des frictions inutiles, notamment avec la zone d'étape qui représente une étape supplémentaire entre la modification d'un fichier et l'enregistrement de la modification.
JJ, quant à lui, est un système de contrôle de version créé par Martin von Zweigbergk à Google, écrit en Rust et compatible avec Git. Il permet d'utiliser JJ sur des dépôts Git existants sans que l'équipe doive changer ses habitudes.
Analyse et Implications
La principale innovation de JJ est de supprimer la zone d'étape, ce qui signifie que chaque modification est automatiquement partie de la validation de travail en cours. Il n'y a plus besoin de git add ou de se soucier de oublier de mettre en scène certaines modifications.
De plus, JJ dispose d'un journal d'opérations qui permet de suivre toutes les opérations effectuées sur le dépôt, y compris les annulations et les restaurations. Cela permet de travailler plus rapidement et sans crainte, car il est possible d'annuler ou de restaurer n'importe quelle opération.
Perspective
Malgré quelques limites, notamment en termes d'écosystème et d'intégrations avec les IDE et les outils de CI, JJ offre une véritable amélioration du workflow Git pour l'écriture de code, l'organisation des validations et la collaboration à travers les dépôts Git distants.
Les développeurs peuvent essayer JJ sur un projet réel aujourd'hui sans demander la permission de quiconque, et si cela ne leur convient pas, ils peuvent simplement supprimer le répertoire .jj pour revenir à Git.
En résumé, JJ semble être une solution prometteuse pour simplifier et améliorer le workflow Git, en éliminant les frictions inutiles et en offrant une plus grande flexibilité et sécurité dans la gestion des modifications et des validations.