URL:     https://linuxfr.org/users/wilk/journaux/jujutsu-v0-44-0
Title:   Jujutsu v0.44.0
Authors: wilk
Date:    2026-08-07T16:46:49+02:00
License: CC By-SA
Tags:    jj, git et vcs
Score:   5


Jujutsu, dit jj, est un gestionnaire de version dans la lignée de Git.
Il est assez récent, créé par Martin von Zweigbergk, un ingénieur de Google comme projet personnel puis adopté par Google.

Sa première qualité vient du fait d'avoir plusieurs backends possibles, actuellement uniquement Git ce qui le rend entièrement compatible avec un dépôt Git. Ensuite avec Piper, le backend interne chez Google.
On peut donc interagir avec n'importe quel dépôt git avec jj ou avec git, avec des contributeurs utilisant jj ou git et donc sur Github, Codeberg etc.

Il est particulièrement simple et intuitif. En quelque jours on s'habitue aux commandes de bases équivalentes à git dont les options sont plus cohérentes (il me semble).

Tout est enregistré dès qu'on tape n'importe quelle commande jj (exactement comme si on faisait plein de petits commit, autant de petits snapshots) et on peut revenir en arrière sur tout ce qui a été enregistré. Ce qui fait qu'il est très facile et sécurisant d'essayer une nouvelle commande ou de revenir sur un fichier même sans avoir fait de commit `jj undo`.

La grande différence avec git réside dans le fait qu'il n'y pas de notion de staging, on bosse directement et systématiquement dans le commit en cours. Comme indiqué précédemment, toute commande jj enregistre l'état actuel des fichiers (tous les fichiers systématiquement -sauf ignorés-, sans avoir à les ajouter). Dès qu'on est content de notre commit actuel on passe au suivant `jj new`.

Notre commit actuel n'a pas de description au départ, on peut lui en donner une à tout moment, soit avant de commencer à programmer soit avant de passer au commit suivant, à sa guise. Personnellement je crée la description au départ `jj new -m 'correction du bug trucmuche'`, hack hack hack. j'ajuste éventuellement la description `jj describe -m 'correction partielle du bug trucmuche'` et je passe au suivant `jj new ...`. Le raccourci plus intuitif venant de git étant `jj commit -m ...` qui fait un describe et new en même temps.

Autre différence importante, le rebase est par défaut. Si je reviens sur mon commit précédent, `jj edit @-` (ou n'importe quel autre) et ajuste quelques fichiers les commits enfants suivants seront automatiquement mis à jour également. S'il y a des conflits ça n'est pas bloquant, les conflits sont indiqués sur les commits suivants et corrigés maintenant ou plus tard ou jamais. Ca parait dangereux au départ mais c'est finalement très pratique et de toutes façons on peut toujours annuler. Certains commits peuvent être considérés comme immutables (par ex en configurant les branches remotes) et évite de créer des problèmes à l'extérieur.

La notion de branche est également différente, on parle de bookmark. C'est la notion la plus perturbante au début. Un bookmark est l'équivalent d'une branche qui ne bouge pas automatiquement (un peu comme un tag). Il faut donc "bouger" un bookmark lorsqu'on veut lui faire suivre les commits concernés. Personnellement j'utilise plusieurs branches actives, une par déploiement/client, ce qui fait que c'est finalement plus intuitif. Lorsqu'un client est mis à jour je bouge sa branche (et non l'inverse).

Pour les opérations plus complexes je trouve jj beaucoup plus intuitif et sécurisé, il est très facile de réarranger des commits, de les fusionner, de les séparer etc. Ce que je faisais beaucoup plus rarement avec git même si je ne m'en plaignais pas particulièrement.

J'ai de plus en plus de mal à décrire les différences avec git tellement j'ai adopté jj entièrement (d'où mon journal -un peu en vrac tellement enthousiasmé-, avant de tout oublier). Par curiosité au départ (et non pas par soucis avec git) et par confort et facilité par la suite, en quelques jours, sans jamais revenir en arrière depuis plusieurs mois.

La période estivale est tout à fait propice à expérimenter ce genre d'outils !

https://www.jj-vcs.dev/

Tutoriels :
- https://docs.jj-vcs.dev/v0.44.0/tutorial/ (dernière version officielle)
- https://steveklabnik.github.io/jujutsu-tutorial/ (pour les utilisateurs git)
- https://jj-for-everyone.github.io/ (pour les utilisateurs sans expérience particulière avec git)
