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)
|
|||
|
|