2022-11-15 19:03:19 +03:00
# Sapling SCM
2020-03-31 05:24:43 +03:00
2022-11-15 19:03:19 +03:00
Sapling SCM is a cross-platform, highly scalable, Git-compatible source control system.
2020-03-31 05:24:43 +03:00
It aims to provide both user-friendly and powerful interfaces for users, as
well as extreme scalability to deal with repositories containing many millions
of files and many millions of commits.
2022-11-15 19:03:19 +03:00
# Using Sapling
To start using Sapling, see the [Getting Started ](https://sapling-scm.com/docs/introduction/getting-started ) page for how to clone your existing Git repositories. Checkout the [Overview ](https://sapling-scm.com/docs/overview/intro ) for a peek at the various features. Coming from Git? Checkout the [Git Cheat Sheet ](http://sapling-scm.com/docs/introduction/git-cheat-sheet ).
2020-03-31 05:24:43 +03:00
2022-11-15 19:03:19 +03:00
Sapling also comes with an [Interactive Smartlog (ISL) ](http://sapling-scm.com/docs/addons/isl ) web UI for seeing and interacting with your repository, as well as a VS Code integrated Interactive Smartlog.
# The Sapling Ecosystem
Sapling SCM is comprised of three main components:
* The Sapling client: The client-side `sl` command line and web interface for users to interact
with Sapling SCM.
* Mononoke: A highly scalable distributed source control server. (Not yet
supported publicly.)
2020-03-31 05:24:43 +03:00
* EdenFS: A virtual filesystem for efficiently checking out large repositories.
2022-11-15 19:03:19 +03:00
(Not yet supported publicly.)
2020-03-31 05:24:43 +03:00
2022-11-15 19:03:19 +03:00
Sapling SCM's scalability goals are to ensure that all source control operations
2020-03-31 05:24:43 +03:00
scale with the number of files in use by a developer, and not with the size of
2022-11-15 19:03:19 +03:00
the repository itself. This enables fast, performant developer experiences even
in massive repositories with millions of files and extremely long commit histories.
2020-03-31 05:24:43 +03:00
2022-11-15 20:02:28 +03:00
### Sapling CLI
2020-03-31 05:24:43 +03:00
2022-11-15 19:03:19 +03:00
The Sapling CLI, `sl` , was originally based on
[Mercurial ](https://www.mercurial-scm.org/ ), and shares various aspects of the UI
2020-03-31 05:24:43 +03:00
and features of Mercurial.
The CLI code can be found in the `eden/scm` subdirectory.
2022-11-15 20:02:28 +03:00
### Mononoke
2020-03-31 05:24:43 +03:00
2022-11-15 19:03:19 +03:00
[Mononoke ](eden/mononoke/README.md ) is the server-side component of Sapling SCM.
2020-03-31 05:24:43 +03:00
2022-11-15 19:03:19 +03:00
While it is used in production within Meta, it currently does not build in an
open source context and is not yet supported for external usage.
2020-03-31 05:24:43 +03:00
2022-11-15 20:02:28 +03:00
### EdenFS
2020-03-31 05:24:43 +03:00
2022-11-15 19:03:19 +03:00
EdenFS is a virtual file system for managing Sapling checkouts.
2016-05-12 22:22:30 +03:00
2022-11-15 20:02:28 +03:00
While it is used in production within Meta, it currently does not build in an
open source context and is not yet supported for external usage.
2018-10-30 23:33:30 +03:00
EdenFS speeds up operations in large repositories by only populating working
directory files on demand, as they are accessed. This makes operations like
`checkout` much faster, in exchange for a small performance hit when first
accessing new files. This is quite beneficial in large repositories where
developers often only work with a small subset of the repository at a time.
2016-05-12 22:22:30 +03:00
2020-05-16 04:05:12 +03:00
More detailed EdenFS design documentation can be found at
[eden/fs/docs/Overview.md ](eden/fs/docs/Overview.md ).
2022-11-15 19:03:19 +03:00
## Building the Sapling CLI
2018-10-30 23:33:30 +03:00
2022-11-15 19:03:19 +03:00
The Sapling CLI currently builds and runs on Linux, Mac, and Windows. It can be
built by running `make oss` in the `eden/scm` directory and running the
resulting `sl` executable.
2020-07-24 21:32:34 +03:00
2022-11-15 19:03:19 +03:00
Building the Sapling CLI requires Python 3.8, Rust, cmake, and OpenSSL for the main cli, and
Node and Yarn for the ISL web UI.
2019-04-27 00:35:22 +03:00
# License
See [LICENSE ](LICENSE ).