Steve's Jujutsu Tutorial
Reception of the Tutorial and of jj
- Many readers found the tutorial unusually clear and approachable, helping them finally “get” what jj is about.
- Several people reported being excited to try jj, especially because it can work on top of existing git repos.
- Some note the tutorial is slightly out of date (e.g., “branches” now called “bookmarks”), with a revised version in progress.
Core jj Concepts: Changes, Commits, Auto-Snapshots
- A key mental model:
- A change is a stable identifier for one conceptual modification.
- Multiple underlying commits (snapshots) can represent successive iterations of that change.
- The working copy is always committed: every jj command implicitly snapshots the state; optional integration with a file-watcher can make this fully automatic.
- Older snapshots remain accessible via logs, including an operation log for the whole repo.
Workflow vs Git: Index, Branches, Stacks
- Some dislike jj for lacking git’s index, using the index to stage “done but not ready to push” work.
- Others argue jj offers a more powerful analog: treat the current change as an evolving “index,” and work on parent/child changes instead of staging.
- Concern about accidentally pushing “garbage” from the working-copy commit is countered: jj’s push only sends explicitly named branches/bookmarks, not arbitrary commits like
@. - Branch names/bookmarks do not auto-follow new commits; you’re “on” a change, and branches are pointers to changes. This simplifies stacked work that must merge in discrete pieces.
Conflict Handling and History Editing
- jj stores conflicts as first-class objects in commits.
- Benefits mentioned:
- No “interrupted rebase” or orphan/obsolete states.
- Descendants can always be rebased, even through conflicts.
- Conflicts can be resolved later, possibly collaboratively.
- Users report that complex reorderings or mistakes during rebases are easier to undo and fix than in git.
Git Interop, Tooling, and Alternatives
- Git interoperability is highlighted as a “killer feature”: contributors can keep using git and GitHub while an individual uses jj locally.
- Some stay on git solely for ecosystem reasons (GitHub, existing tooling, contributors’ expectations).
- Lack of a rich jj plugin for Neovim and other editors is a blocker for some, especially compared to tools like Fugitive, Neogit, or magit.
- Comparisons arise with Sapling (good but less general, weaker conflict model), Mercurial, Fossil, Pijul, Perforce, and monorepo setups; opinions are mixed, but several see jj and Sapling as “leagues ahead” of git’s UX.
Naming and Miscellaneous Concerns
- Multiple comments criticize “Jujutsu/jj” as an opaque, hard-to-search name; others note even older tools (git, CVS, Subversion) aren’t exactly descriptive either.
- Some mention friction with Nix flakes and jj, but details remain unclear.