| scalar(1) |
| ========= |
| |
| NAME |
| ---- |
| scalar - A tool for managing large Git repositories |
| |
| SYNOPSIS |
| -------- |
| [verse] |
| scalar clone [--single-branch] [--branch <main-branch>] [--full-clone] |
| [--[no-]src] <url> [<enlistment>] |
| scalar list |
| scalar register [<enlistment>] |
| scalar unregister [<enlistment>] |
| scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [<enlistment>] |
| scalar reconfigure [ --all | <enlistment> ] |
| scalar diagnose [<enlistment>] |
| scalar delete <enlistment> |
| |
| DESCRIPTION |
| ----------- |
| |
| Scalar is a repository management tool that optimizes Git for use in large |
| repositories. Scalar improves performance by configuring advanced Git settings, |
| maintaining repositories in the background, and helping to reduce data sent |
| across the network. |
| |
| An important Scalar concept is the enlistment: this is the top-level directory |
| of the project. It usually contains the subdirectory `src/` which is a Git |
| worktree. This encourages the separation between tracked files (inside `src/`) |
| and untracked files, such as build artifacts (outside `src/`). When registering |
| an existing Git worktree with Scalar whose name is not `src`, the enlistment |
| will be identical to the worktree. |
| |
| The `scalar` command implements various subcommands, and different options |
| depending on the subcommand. With the exception of `clone`, `list` and |
| `reconfigure --all`, all subcommands expect to be run in an enlistment. |
| |
| The following options can be specified _before_ the subcommand: |
| |
| -C <directory>:: |
| Before running the subcommand, change the working directory. This |
| option imitates the same option of linkgit:git[1]. |
| |
| -c <key>=<value>:: |
| For the duration of running the specified subcommand, configure this |
| setting. This option imitates the same option of linkgit:git[1]. |
| |
| COMMANDS |
| -------- |
| |
| Clone |
| ~~~~~ |
| |
| clone [<options>] <url> [<enlistment>]:: |
| Clones the specified repository, similar to linkgit:git-clone[1]. By |
| default, only commit and tree objects are cloned. Once finished, the |
| worktree is located at `<enlistment>/src`. |
| + |
| The sparse-checkout feature is enabled (except when run with `--full-clone`) |
| and the only files present are those in the top-level directory. Use |
| `git sparse-checkout set` to expand the set of directories you want to see, |
| or `git sparse-checkout disable` to expand to all files (see |
| linkgit:git-sparse-checkout[1] for more details). You can explore the |
| subdirectories outside your sparse-checkout by using `git ls-tree |
| HEAD[:<directory>]`. |
| |
| -b <name>:: |
| --branch <name>:: |
| Instead of checking out the branch pointed to by the cloned |
| repository's HEAD, check out the `<name>` branch instead. |
| |
| --[no-]single-branch:: |
| Clone only the history leading to the tip of a single branch, either |
| specified by the `--branch` option or the primary branch remote's |
| `HEAD` points at. |
| + |
| Further fetches into the resulting repository will only update the |
| remote-tracking branch for the branch this option was used for the initial |
| cloning. If the HEAD at the remote did not point at any branch when |
| `--single-branch` clone was made, no remote-tracking branch is created. |
| |
| --[no-]src:: |
| By default, `scalar clone` places the cloned repository within a |
| `<entlistment>/src` directory. Use `--no-src` to place the cloned |
| repository directly in the `<enlistment>` directory. |
| |
| --[no-]full-clone:: |
| A sparse-checkout is initialized by default. This behavior can be |
| turned off via `--full-clone`. |
| |
| List |
| ~~~~ |
| |
| list:: |
| List enlistments that are currently registered by Scalar. This |
| subcommand does not need to be run inside an enlistment. |
| |
| Register |
| ~~~~~~~~ |
| |
| register [<enlistment>]:: |
| Adds the enlistment's repository to the list of registered repositories |
| and starts background maintenance. If `<enlistment>` is not provided, |
| then the enlistment associated with the current working directory is |
| registered. |
| + |
| Note: when this subcommand is called in a worktree that is called `src/`, its |
| parent directory is considered to be the Scalar enlistment. If the worktree is |
| _not_ called `src/`, it itself will be considered to be the Scalar enlistment. |
| |
| Unregister |
| ~~~~~~~~~~ |
| |
| unregister [<enlistment>]:: |
| Remove the specified repository from the list of repositories |
| registered with Scalar and stop the scheduled background maintenance. |
| |
| Run |
| ~~~ |
| |
| scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [<enlistment>]:: |
| Run the given maintenance task (or all tasks, if `all` was specified). |
| Except for `all` and `config`, this subcommand simply hands off to |
| linkgit:git-maintenance[1] (mapping `fetch` to `prefetch` and |
| `pack-files` to `incremental-repack`). |
| + |
| These tasks are run automatically as part of the scheduled maintenance, |
| as soon as the repository is registered with Scalar. It should therefore |
| not be necessary to run this subcommand manually. |
| + |
| The `config` task is specific to Scalar and configures all those |
| opinionated default settings that make Git work more efficiently with |
| large repositories. As this task is run as part of `scalar clone` |
| automatically, explicit invocations of this task are rarely needed. |
| |
| Reconfigure |
| ~~~~~~~~~~~ |
| |
| After a Scalar upgrade, or when the configuration of a Scalar enlistment |
| was somehow corrupted or changed by mistake, this subcommand allows to |
| reconfigure the enlistment. |
| |
| With the `--all` option, all enlistments currently registered with Scalar |
| will be reconfigured. Use this option after each Scalar upgrade. |
| |
| Diagnose |
| ~~~~~~~~ |
| |
| diagnose [<enlistment>]:: |
| When reporting issues with Scalar, it is often helpful to provide the |
| information gathered by this command, including logs and certain |
| statistics describing the data shape of the current enlistment. |
| + |
| The output of this command is a `.zip` file that is written into |
| a directory adjacent to the worktree in the `src` directory. |
| |
| Delete |
| ~~~~~~ |
| |
| delete <enlistment>:: |
| This subcommand lets you delete an existing Scalar enlistment from your |
| local file system, unregistering the repository. |
| |
| SEE ALSO |
| -------- |
| linkgit:git-clone[1], linkgit:git-maintenance[1]. |
| |
| GIT |
| --- |
| Part of the linkgit:git[1] suite |