Spaces:
Running
Running
Scalar | |
====== | |
Scalar is a repository management tool that optimizes Git for use in large | |
repositories. It accomplishes this by helping users to take advantage of | |
advanced performance features in Git. Unlike most other Git built-in commands, | |
Scalar is not executed as a subcommand of 'git'; rather, it is built as a | |
separate executable containing its own series of subcommands. | |
Background | |
---------- | |
Scalar was originally designed as an add-on to Git and implemented as a .NET | |
Core application. It was created based on the learnings from the VFS for Git | |
project (another application aimed at improving the experience of working with | |
large repositories). As part of its initial implementation, Scalar relied on | |
custom features in the Microsoft fork of Git that have since been integrated | |
into core Git: | |
* partial clone, | |
* commit graphs, | |
* multi-pack index, | |
* sparse checkout (cone mode), | |
* scheduled background maintenance, | |
* etc | |
With the requisite Git functionality in place and a desire to bring the benefits | |
of Scalar to the larger Git community, the Scalar application itself was ported | |
from C# to C and integrated upstream. | |
Features | |
-------- | |
Scalar is comprised of two major pieces of functionality: automatically | |
configuring built-in Git performance features and managing repository | |
enlistments. | |
The Git performance features configured by Scalar (see "Background" for | |
examples) confer substantial performance benefits to large repositories, but are | |
either too experimental to enable for all of Git yet, or only benefit large | |
repositories. As new features are introduced, Scalar should be updated | |
accordingly to incorporate them. This will prevent the tool from becoming stale | |
while also providing a path for more easily bringing features to the appropriate | |
users. | |
Enlistments are how Scalar knows which repositories on a user's system should | |
utilize Scalar-configured features. This allows it to update performance | |
settings when new ones are added to the tool, as well as centrally manage | |
repository maintenance. The enlistment structure - a root directory with a | |
`src/` subdirectory containing the cloned repository itself - is designed to | |
encourage users to route build outputs outside of the repository to avoid the | |
performance-limiting overhead of ignoring those files in Git. | |
Design | |
------ | |
Scalar is implemented in C and interacts with Git via a mix of child process | |
invocations of Git and direct usage of `libgit.a`. Internally, it is structured | |
much like other built-ins with subcommands (e.g., `git stash`), containing a | |
`cmd_<subcommand>()` function for each subcommand, routed through a `cmd_main()` | |
function. Most options are unique to each subcommand, with `scalar` respecting | |
some "global" `git` options (e.g., `-c` and `-C`). | |
Because `scalar` is not invoked as a Git subcommand (like `git scalar`), it is | |
built and installed as its own executable in the `bin/` directory, alongside | |
`git`, `git-gui`, etc. | |