I'm daily driving Jujutsu, and maybe you should too December 10, 2024 on Drew DeVault's blog

I’m not the first to write about how Jujutsu won me over. I’ve seen it off and on, and each time it came across my feed it was bumped a bit higher in my “list of things to look at eventually”. It finally reached the top spot, I think, when I saw Tony Finn’s post and made some time for it that week. I was skeptical; jj is one of many git-but-not-git tools currently and previously on my “list”, and I have kept an open mind but ultimately have always been underwhelmed by such endeavours.

Jujutsu is a version control system. They aim to be independent at some point but for now it is a heady frontend on top of git (a big advantage – all of your existing git repos and tools are trivially compatible with it). Like many other tools in this niche, the jj pitch begins from the thesis that git’s user interface is bad. Every time I’ve heard this pitch, for jj or otherwise, my enthusiasm has rapidly waned. I really like git! I think that its internals are the platonic ideal version control system and its porcelain1 makes a lot more sense if you grok its internals – though indeed I would agree that the porcelain is far from perfect.

Every not-git VCS I have evaluated over the past few years have soured me by answering the “git’s user interface is bad” premise with “and therefore we should simplify it to the lowest common denominator”, which is to say, “we are taking all of your toys away, power user, for the sake of the noob”. I began to explore Jujutsu expecting to find more of the same. Where jj differs, however, from the other not-gits, is that it begins from “git’s user interface is bad” and follows with “but you, power user, your workflow is the correct way to use git, and our raison d’être is to make it easier.” Wow! Consider me flattered, and intrigued.

As a git power user, I rely heavily on git rebase to edit my git history as I work, frequently squashing and splitting and editing commits as I work, and I used “stacked diffs” without branches before it was cool. jj makes every part of my workflow easier and faster. Enough ink has been spilled presenting jj in depth, so instead I’ll just share with you an anecdote of my “wow” moment with Jujutsu.

One day I was working on a large-ish change. I had written a few commits over the course of the day towards this end. However, I noticed that I had overlooked something in a commit three or four commits earlier. So I touched up the relevant code and then ran jj squash -i -t <commit ID> to squash the changes into the earlier <commit ID>. This command fires up an interface similar to git add -p, which interactively presented me with hunks out of my working directory to choose from. I found the one I wanted, selected it, then dismissed the interactive thingy with a quick keystroke. And it was done!

There are some hidden details in this story that I want to draw your attention to. When I edited this earlier commit, I was in the middle of working on something else and I hadn’t committed or even staged it. I did not run git stash, nor git commit -m"WIP", nor git add, nor git checkout, nor git rebase, at any point. The only command I ran was jj squash.2 When it was done, I was returned immediately to where I left off, with a half-written, uncommitted change in my workdir. It took all of two seconds to complete this operation and pick up where I left off.

The “wow” moment came when I realized that I had done this several times that day without finding it particularly remarkable. Jujutsu makes editing history absolutely effortless.

Before I add any further breathless praise for jj, I will note three criticisms.

First, jj lacks any first-class support for the git send-email workflow that I depend on for almost all of the projects I work on. Second, jj lacks a “jj grep” command, and the recommended workaround is Not Good™. I work around both problems by using jj with a co-located git repo at all times, which causes jj and git to share the same repository in the same directory and allows for either git(1) or jj(1) to be used as the need demands.

I would have contributed patches to address these shortcomings if it were not for my third criticism, which addresses the elephant in the room: Jujutsu is a Google employee’s “20% project”, and thus all contributors are required to sign the Google CLA to participate. I refuse to sign any such thing and so should you. I have raised the issue on GitHub but it hasn’t attracted any sort of official response. This stiffly limits my enthusiasm for the project and any kind of collaboration. I would be very excited to work on Jujutsu, and in particular explore some very interesting possibilities regarding integrations with SourceHut and email generally, if it weren’t for this problem.

Nevertheless, I have adopted jj as my daily driver for private use, and if and when the need arises I will maintain some personal patches until the Google problem goes away. Feel free to email me your own patches if you want to share them around but don’t want to sign the CLA, either.


  1. The user-interface, as contrasted from the internals – the “plumbing”. Ha ha ha. ↩︎

  2. A white lie: I also ran jj log to remind myself of the change ID that I wanted to edit. ↩︎

Articles from blogs I read Generated by openring

Debanking (and Debunking?)

Crypto advocates kicked off a recent, somewhat politicized, discussion of debanking. Strap in for scintillating banking compliance trivia.

via Bits about Money December 9, 2024

Conjuring a Linux distribution out of thin air

I decided I had to get something with slightly more CPU power than my Thinkpad x230 for a few tasks so I got a refurbished x280, aside from the worse keyboard the laptop is pretty nice and light. It shipped with Windows of course so the first thing I did …

via BrixIT Blog December 7, 2024

Threads Won't Take You South of Market

In June 2023, when Threads announced their plans to federate with other Fediverse instances, there was a good deal of debate around whether smaller instances should allow federation or block it pre-emptively. As one of the admins of woof.group, I wrote ab…

via Aphyr: Posts December 1, 2024