132 lines
2.3 KiB
Markdown
132 lines
2.3 KiB
Markdown
---
|
||
marp: false
|
||
theme: gaia
|
||
footer: '**Fabien Freling** - 2025-02-17'
|
||
paginate: true
|
||
---
|
||
|
||
<style>
|
||
section::after {
|
||
content: attr(data-marpit-pagination) '/' attr(data-marpit-pagination-total);
|
||
}
|
||
</style>
|
||
|
||
|
||
<!--
|
||
_class: lead
|
||
-->
|
||
|
||
# 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
|
||
|
||

|
||
<revision id> <author> <date> <branch> <commit id>
|
||
|
||
- @ 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
|
||
|
||
---
|
||
|
||
<!--
|
||
_class: lead
|
||
-->
|
||
|
||
## 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)
|
||
|