mirror of
https://github.com/martinvonz/jj.git
synced 2025-05-05 15:32:49 +00:00
docs: Add a Jujutsu from first principles doc
This came up recently in Discord as a explanation was requested without referencing Git, which all our other documents do. I think this may be useful for the initial page on the website.
This commit is contained in:
parent
a31c811265
commit
9fecd59936
61
docs/jj_first_principles.md
Normal file
61
docs/jj_first_principles.md
Normal file
@ -0,0 +1,61 @@
|
||||
# Jujutsu from first principles (without Git)
|
||||
|
||||
This document describes what Jujutsu's core principles are and explores some
|
||||
possibilities which a native backend could encompass.
|
||||
|
||||
## Preface
|
||||
|
||||
Why does Jujutsu exist and which problems does it solve? This document tries to
|
||||
answer both of these questions while expanding on the design in a user-friendly
|
||||
way.
|
||||
|
||||
At its core Jujutsu is [Version Control System][vcs] which scales to huge
|
||||
repositories at [Google scale][billion-lines]. Many design choices are
|
||||
influenced by the concurrent commits happening in Google's Monorepo, as there
|
||||
are always multiple people working on the same file(s) at the same time.
|
||||
|
||||
## Base design
|
||||
|
||||
The initial base design is to be a conceptually simpler Mercurial, as
|
||||
automatically snapshotting the working copy simplifies the UX of the
|
||||
command-line interface by a huge amount and avoids many bad states.
|
||||
|
||||
By also choosing to operate by default on the history of the repository (
|
||||
just called the "the Graph" from now on) instead of files, all history
|
||||
modifying commands can be done at any point. This is a major improvement on
|
||||
other version control systems as they need to re-apply a single patch on each
|
||||
new ancestor before finishing the Graph rewrite. Since the Graph can be changed
|
||||
at any point, the working copy cannot contain any state depending on it, thus
|
||||
we have the working-copy commit, which just is another commit from the Graph's
|
||||
point of view.
|
||||
|
||||
### Commit Evolution (Change-IDs and Changes)
|
||||
|
||||
Since Jujutsu is oriented around a "stacked diffs" kind of workflow, which
|
||||
primarily work on individually versioned patch sets, some kind of container is
|
||||
needed, this is what a Change is. They are provided with a unique id to address
|
||||
them easily. This mechanism is also customizable so a custom backend could add
|
||||
a new scheme, which is a major win for tool integrations such as codereview.
|
||||
And since each change can be addressed individually it simplifies the
|
||||
commandline.
|
||||
|
||||
### Operation store
|
||||
|
||||
The operation store is a abstraction for synchronizing multiple clients to a
|
||||
common state which allows Jujutsu to seamlessly work across multiple
|
||||
workstations and laptops. And since this part is also customizable, a custom
|
||||
backend can stream them to all known client devices for a user, which enables
|
||||
a transparent multi-machine rollback mechanism.
|
||||
|
||||
### Built for large repos and external infrastructure
|
||||
|
||||
As most parts of Jujutsu are replaceable, it allows easy an easy integration
|
||||
into existing infrastructure. This means that if you have a large fleet
|
||||
of build servers which support the Remote Execution (RE) protocol, commands
|
||||
such as `jj run` and `jj fix` can be made to utilize them. And since Jujutsu's
|
||||
core is also a library, there's an easy way to integrate it into code-review
|
||||
tool backends.
|
||||
|
||||
|
||||
[billion-lines]: https://www.youtube.com/watch?v=W7*TkUbdqE&t=327s
|
||||
[vcs]: https://en.wikipedia.org/wiki/Version_control
|
Loading…
x
Reference in New Issue
Block a user