I was inspired to try Jujutsu when I saw a link to Steve Klabnik's Jujutsu tutorial; I'd heard about the tool a few times, but hadn't made the jump.

Note: unlike some of my other posts, this one will be updated as I notice things.

Table of Contents

The Good

  • I am really appreciating the sense of safety that comes with versioning the working copy. I've done that before, by integrating tiny commits into my editor, but that got cumbersome with always having to rebase and manage those changes.

  • The fact that it can colocate with an existing git clone is delightful. I've tacked jj on to some of my existing repositories, including one at work, and am experimenting "in prod" as it were.

  • The way jj displays conflicts is excellent.

The Different

  • Implicitly named branches has been interesting to get used to, but I've actually found I don't spend a lot of time thinking about it. I'm going to investigate ways to make a default template based off of a "slug" from @'s description.

  • I have a habit of keeping "personal" untracked files around, scripts that I don't feel like moving to PR review, or WIP changes that are in new files and I don't keep a full branch for. Jujutsu really doesn't play nice with this workflow that is, honestly, not Git-friendly either, but is an old habit. I'm probably going to need to find a nice, friendly way to make cheap local WIP branches for those.

The Bad

  • This almost fits under different intead of bad but I'm really not fond of the length of the --limit= flag for jj log; limiting the log to different lengths is something I do a lot and git's affordance for it (git log -5) is an elegant, helpful shortcut.

  • It looks like jj is deprecating the automatic use of @ -- the current edited change -- in a lot of commands, requiring the use of -r@ in a lot of commands that otherwise would "just work"; I'm not fond. I'm hoping there's a setting somewhere that I can use to restore this.

  • The lack of an easy way -- that I've found, so far! -- to one-shot "move the tracking bookmark I'm working on to the tip of my current revset" -- is frustrating. I have thus far failed to develop a usable alias for jj bookmark move <figure-out-this-name> --to @

    Edit: I have been shown a solution to this by Nathan Witmer in his Jujutsu tips and tricks article. The short answer is an alias called tug that is documented in the Bookmarks and branches section of his article.

  • A total lack of decent Emacs support for this VCS is really challenging me. I live in Emacs nearly full time, and I miss support for merging in smerge-mode, and my god do I miss the UI of magit. If I give up on this experiment, it'll be because I don't have magit support.

  • No support for pre-push hooks. pre-commit support and general hook support are just missing. That's fine 90% of the time for me, but my employer's main repository does some seriously heavy lifting in its pre-push hook that saves a lot of time.

Feedback

You can reply to this post via Mastodon:

Waiting to load comments

Reply to @offby1's post

With an account on the Fediverse or Mastodon, you can respond to this post. Since Mastodon is decentralized, you can use your existing account hosted by another Mastodon server or compatible platform if you don't have an account on this one.

Copy and paste this URL into the search field of your favourite Fediverse app or the web interface of your Mastodon server.