jj v0.46, seconde lecture : la rampe s'élargit, le undo gagne des garde-fous
Deux semaines, +216 étoiles et une version plus tard : la colocated en worktree rend l'essai moins cher, le undo inter-workspace est refusé par défaut — et le banc est toujours dû.
Il y a deux semaines, ce site lisait la fiche de jj pour la première fois et l'appelait le bouton undo que git n'a jamais eu — 31 796 étoiles, des versions mensuelles, un journal d'opérations. Aujourd'hui, la seconde lecture : 32 012 étoiles, v0.46.0 publiée il y a six jours, et le dépôt a été poussé à 05:22 ce matin, UTC, avant que la bouilloire ne fût branchée. La ligne d'honnêteté d'abord, comme la dernière fois : nous avons lu la fiche, pas exécuté. Ce qu'une seconde lecture ajoute, c'est ce qu'une première ne peut pas avoir — un delta.
v0.46.0 est sortie le 7 octobre — les workspaces de jj coexistent désormais via de vrais worktrees git, et un jj undo inter-workspaces est refusé par défaut. Plus sûr, pas seulement plus récent.
La quinzaine, vue de nos deux lectures : 31 796 → 32 012 étoiles, une cadence de publication de 34 jours, un dépôt poussé le matin où ceci fut écrit.
Votre dépôt reste 100 % git. En colocated, GitHub et vos collègues voient un dépôt git des plus banaux — le coût de bascule, c'est la mémoire musculaire, pas la migration.
Et le mensonge que ce papier refuse : un numéro de version serait une actualité. La plupart des versions ponctuelles sont de la plomberie. v0.46.0, non — elle change l'équation du basculement, et les données de demande de la quinzaine expliquent pourquoi cela importe plus que le changelog ne l'admet.
LA FICHE DE LA QUINZAINE
Les chiffres d'abord, car c'est la seule partie de ce papier que personne ne peut contester.
| la mesure | première lecture (29 sept) | seconde lecture (13 oct) |
|---|---|---|
| étoiles GitHub | 31 796 | 32 012 (+216 / 14 jours ≈ 15/jour) |
| dernière version | v0.45.1 (3 sept) | v0.46.0 (7 oct — 34 jours d'écart) |
| dépôt poussé le | actif | 05:22 UTC ce matin |
| issues ouvertes | — | 1 260 |
Les étoiles sont de la vanité, la cadence est le signal : deux versions en six semaines avec les ruptures correctement listées, voilà un projet qui publie et qui dit ce qu'il casse. Les 1 260 issues ouvertes se lisent de même — un outil en mouvement, pas un outil fini.
Notre propre registre porte le second signal. La plus grande famille d'impressions du cluster git ce mois-ci reste toujours undo a commit but keep the changes — impressions en hausse de 100 % d'une semaine sur l'autre, et presque zéro clic, parce que la réponse git honnête va profond de trois commandes et les lecteurs le sentent. La demande de undo n'a pas attendu jj. Elle n'attend jamais.
JUJUTSU VS GIT : LA TABLE DU UNDO
La première lecture expliquait le modèle — la copie de travail est un commit, chaque opération écrit dans le journal des opérations, les conflits sont des citoyens de première classe. Ce qu'elle avait sauté, et ce que les données de recherche disent que les gens cherchent réellement à 6 h du matin, c'est la table au niveau des phrases : la tâche, tapée comme les chercheurs la tapent, dans les deux dialectes.
| la tâche | git (l'incantation) | jj (l'opération) |
|---|---|---|
| annuler ma dernière action | reflog, plisser les yeux, reset --soft ou reset --keep | jj undo |
| annuler l'annulation | il n'existe pas de chemin propre | jj redo |
| voir ce qui vient de se passer | git reflog | jj op log |
| amender le dernier commit | git commit --amend | modifier les fichiers — le commit de copie de travail s'amende tout seul |
| garder un conflit pour plus tard | non permis — résous maintenant ou arrête | les conflits sont des commits ; résous quand tu veux |
Dans git, undo c'est de l'archéologie — creuser le reflog, trouver le tesson, reconstruire. Dans jj, la bande n'a jamais été enterrée : undo est une opération sur le journal des opérations. Excavation contre bouton de rembobinage.
Visualisez : git vous donne l'enregistreur de vol — monté derrière l'avion, lisible après le crash. jj l'a monté sur le tableau de bord et branché sur un bouton de rembobinage.
V0.46.0 : LES DEUX CHANGEMENTS QUI COMPTENT
Des workspaces qui coexistent via de vrais worktrees git. jj workspace add --colocate (ou le réglage git.colocate) met un workspace jj à côté d'une copie de travail git banale sans s'emparer du clone. Lisez-la comme la rampe qui s'élargit : une équipe peut faire tourner un workspace jj à côté d'un checkout git, même machine, même dépôt, et comparer — précisément l'essai que le verdict de la première lecture réclamait. Elle s'appuie sur git worktree add --orphan, d'où le git minimum qui passe à 2.42.0.
Un undo qui connaît ses frontières. jj undo et jj redo refusent désormais de toucher aux opérations d'un autre workspace si vous ne passez pas --allow-cross-workspace. Un outil dont tout l'argument de vente est « undo est sûr » qui resserre les garde-fous autour du undo, c'est le test de culture réussi. Le reste des notes se lit dans le même sens : jj bisect run vérifie ses points d'extrémité bon et mauvais avant de marcher, et jj split ne jongle plus avec des sessions d'éditeur.
ESSAYER L'ENREGISTREUR SANS RISQUER RIEN
Un clone jetable, trois commandes, et le registre est réel sur votre machine — pas seulement dans la doc.
# in a throwaway clone — git keeps working exactly as before
jj git init --colocate
# a .jj directory now sits beside .git; the recorder is running:
jj op log
# the door out, whenever you want it:
rm -rf .jj
vérification : jj op log dans ce clone liste vos opérations avec horodatages — une ligne par commande, et le registre est réel.
LE REGISTRE HONNÊTE : CE QUI CASSE
La mémoire musculaire, d'abord. La danse de l'index — git add -p, staging partiel — se mappe sur squash et split de jj, qui règlent le même problème avec d'autres mains. La première semaine, vous taperez des verbes git et vous serez agacé.
L'optique d'équipe, ensuite. Les dépôts coexistés ressemblent à du git banal pour l'hébergement comme pour les collègues — mais les commits de copie de travail d'un utilisateur jj ne deviennent visibles qu'à la poussée, et « où est mon travail à moitié fini » reçoit une réponse différente de celle que les gens de git attendent. Les petites équipes s'en fichent ; les monorepos à chaînes d'outils profondes devraient attendre. Le refus d'undo inter-workspaces de la v0.46 est une frontière de plus à apprendre — délibérément, et honnêtement, le bon choix.
Et le reçu toujours manquant : les benchmarks. Deux lectures plus loin, la revendication reste non formulée. Nous ne pouvons pas vous dire si le rebase de jj domine celui de git sur un dépôt de 10 000 commits, parce que nous ne l'avons pas fait tourner — ce chiffre n'existe pas tant que le banc n'existe pas, et une seconde lecture ne transforme pas une lecture-de-fiche en banc.
VERDICT, RÉVISÉ : QUI BOUGE CETTE SEMAINE
La première lecture disait : essayez-le. Deux semaines et une version plus loin, l'équation a bougé dans une seule direction — la colocated en worktree de la v0.46 a abaissé le coût de l'essai lui-même, et les données de demande se sont endurcies. La famille undo que notre tableau suit ne s'est pas refroidie d'une seule impression ; et l'outil qui y répond en une commande a publié deux fois. Quand un écart aussi large continue de s'élargir, quelqu'un finit par le fermer. jj le ferme au niveau du modèle, pas du moyen mnémotechnique — la comparaison complète se tient à côté de la décision classique qu'il dérange : revert vs reset, qui a désormais une troisième réponse, et la troisième réponse est un bouton.
- Développeurs solo et petites équipes avec des cicatrices de undo.
- Quiconque enseigne git et en a fini de voir les visages tomber au reflog.
- Les dépôts exploités par agents — la voie que nous surveillons le plus — où chaque opération doit être réversible et vérifiable par défaut. Un journal d'opérations n'y est pas un confort ; c'est la surface d'audit que git n'a jamais livrée.
- Les chaînes d'outils git profondes et les hypothèses de CI lourdes en hooks.
- Quiconque est au milieu d'une migration — rien de tout cela ne vieillit bien en plein vol.
- Et attendez le banc. La prochaine pièce jj de ce site fera tourner jj contre git sur un vrai dépôt et imprimera le chiffre le plus laid en premier — le registre de la quinzaine a acheté le bénéfice du doute exactement une fois.
Deux questions avant ce banc : est-ce qu'un sauvetage au reflog vous a déjà lâché au pire moment — et si vous essayez jj sérieusement ce mois-ci, qu'est-ce qui casse en premier ? Dites-nous quoi tester.
fin de la seconde lecture · rien de téléchargé · tout en local