When the editor still speaks git
A while back I wrote about trying jujutsu. The short version: jj is great because it sits on top of git. Coworkers keep using git, I get a nicer workflow, and everybody wins.
Kind of.
Despite jj trying to be git-compatible, editors and tools don’t expect a detached HEAD, which leads to inconsistent behavior. Neo-tree’s file marks, hunk navigation, and gutter signs all assume a .git directory. On a colocated repo that still works, but in jj workspaces the tree has no M/A/D marks and ]h / [h do nothing, because the tools check git for status.
So I spent some time on two small adapters:
- neo-tree: feed
jj diffinto the same status cache neo-tree uses for git, so the filesystem tree looks normal again in workspaces. - mini.diff: swap gitsigns for mini.diff with a jj-first source (parent revision as reference), falling back to git in plain git repos. Same hunk keys, overlay with
<leader>go.
Still, a lot of the Neovim ecosystem is “git-shaped.” jj’s colocated mode papers over that until you step into a workspace. The neo-tree adapter lives at neotree-jj-adapter. It helps quite a bit, but other issues remain. Agents don’t handle jj repositories very well. They see a detached HEAD, think there is a problem, and try to fix it by switching to a branch.
So for now, I’m back to using git until support for jj matures a little more.