---
marp: false
theme: gaia
footer: '**Fabien Freling** - 2025-02-17'
paginate: true
---
# Jujutsu

---
## What is it?
* New version control software (VCS)
* Separation of **frontend** and **backend**
* Compatible with git
* Slowly replacing git cli at Google (askip)
* Aiming for a simpler workflow
---
## No branch, only revisions

- @ working copy
- ◆ immutable
- × conflict
---
## Embrace the DETACHED HEAD
- No need to be at the tip of a branch
- Easy to change the current revision (no rebase step)
- Each revision has a scope, you can switch / split / squash
- You can modify other branches, not only the current one (there is none)
---
## Immutable revisions
- New concept
- By default `master` is immutable, sane choice
- Clearly express what would create conflict, even local copy cannot change
- You can override it (but don't)
---
## No staging area, everything is logged
- You need a good gitignore
- You can always switch commits without loss
- You might want to recreate a "staging" commit
---
## Conflicts are ok
- Conflicts are recorded but never stop a rebase
- Conflicted commits are annotated
- You can safely rebase, deal with conflicts later on
- No need to mark as resolved
---
## Branches, bookmarks
- Branches (git) = bookmarks (jujutsu)
- Optional during dev
- Mandatory when pushing
- Stick to revision, manual step to update
- Tracked bookmarks are updated during fetch
- No sync conflict between a local copy and its remote
---
## Back to git?
- A way back is always possible
- git view gets confused in detached HEAD
---
## Tooling
- Battery included
- CLI tool for splitting commits
- Git tools not compatible
---
## Takeaway
- 🤩 Good when dealing with multiple tracks
- 😔 Need to explicitely specify branch when pushing commits
- Small improvements, not game-changing
- 😔 No ecosystem, but it's growing (TUI)
- Native backend (not ready yet) would remove a lot of friction
---
## Worth the switch?
# ✋ Not yet
---
# References
- [Official website](https://jj-vcs.github.io/jj/)
- [GUI & TUI](https://github.com/jj-vcs/jj/wiki/GUI-and-TUI)