Git fork
at reftables-rust 66 lines 2.9 kB view raw
1Scalar 2====== 3 4Scalar is a repository management tool that optimizes Git for use in large 5repositories. It accomplishes this by helping users to take advantage of 6advanced performance features in Git. Unlike most other Git built-in commands, 7Scalar is not executed as a subcommand of 'git'; rather, it is built as a 8separate executable containing its own series of subcommands. 9 10Background 11---------- 12 13Scalar was originally designed as an add-on to Git and implemented as a .NET 14Core application. It was created based on the learnings from the VFS for Git 15project (another application aimed at improving the experience of working with 16large repositories). As part of its initial implementation, Scalar relied on 17custom features in the Microsoft fork of Git that have since been integrated 18into core Git: 19 20* partial clone, 21* commit graphs, 22* multi-pack index, 23* sparse checkout (cone mode), 24* scheduled background maintenance, 25* etc 26 27With the requisite Git functionality in place and a desire to bring the benefits 28of Scalar to the larger Git community, the Scalar application itself was ported 29from C# to C and integrated upstream. 30 31Features 32-------- 33 34Scalar is comprised of two major pieces of functionality: automatically 35configuring built-in Git performance features and managing repository 36enlistments. 37 38The Git performance features configured by Scalar (see "Background" for 39examples) confer substantial performance benefits to large repositories, but are 40either too experimental to enable for all of Git yet, or only benefit large 41repositories. As new features are introduced, Scalar should be updated 42accordingly to incorporate them. This will prevent the tool from becoming stale 43while also providing a path for more easily bringing features to the appropriate 44users. 45 46Enlistments are how Scalar knows which repositories on a user's system should 47utilize Scalar-configured features. This allows it to update performance 48settings when new ones are added to the tool, as well as centrally manage 49repository maintenance. The enlistment structure - a root directory with a 50`src/` subdirectory containing the cloned repository itself - is designed to 51encourage users to route build outputs outside of the repository to avoid the 52performance-limiting overhead of ignoring those files in Git. 53 54Design 55------ 56 57Scalar is implemented in C and interacts with Git via a mix of child process 58invocations of Git and direct usage of `libgit.a`. Internally, it is structured 59much like other built-ins with subcommands (e.g., `git stash`), containing a 60`cmd_<subcommand>()` function for each subcommand, routed through a `cmd_main()` 61function. Most options are unique to each subcommand, with `scalar` respecting 62some "global" `git` options (e.g., `-c` and `-C`). 63 64Because `scalar` is not invoked as a Git subcommand (like `git scalar`), it is 65built and installed as its own executable in the `bin/` directory, alongside 66`git`, `git-gui`, etc.