scalar(1)
=========

NAME
----
scalar - A tool for managing large Git repositories

SYNOPSIS
--------
[verse]
scalar clone [--single-branch] [--branch <main-branch>] [--full-clone]
	[--[no-]src] [--[no-]tags] [--[no-]maintenance] <url> [<enlistment>]
scalar list
scalar register [--[no-]maintenance] [<enlistment>]
scalar unregister [<enlistment>]
scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [<enlistment>]
scalar reconfigure [--maintenance=(enable|disable|keep)] [ --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.

--single-branch::
--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.

--src::
--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.

--tags::
--no-tags::
	By default, `scalar clone` will fetch the tag objects advertised by
	the remote and future `git fetch` commands will do the same. Use
	`--no-tags` to avoid fetching tags in `scalar clone` and to configure
	the repository to avoid fetching tags in the future. To fetch tags after
	cloning with `--no-tags`, run `git fetch --tags`.

--full-clone::
--no-full-clone::
	A sparse-checkout is initialized by default. This behavior can be
	turned off via `--full-clone`.

--maintenance::
--no-maintenance::
	By default, `scalar clone` configures the enlistment to use Git's
	background maintenance feature. Use the `--no-maintenance` to skip
	this configuration.

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.

--maintenance::
--no-maintenance::
	By default, `scalar register` configures the enlistment to use Git's
	background maintenance feature. Use the `--no-maintenance` to skip
	this configuration. This does not disable any maintenance that may
	already be enabled in other ways.

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.

--all::
	When `--all` is specified, reconfigure all enlistments currently
	registered with Scalar by the `scalar.repo` config key. Use this
	option after each upgrade to get the latest features.

--maintenance=(enable|disable|keep)::
	By default, Scalar configures the enlistment to use Git's
	background maintenance feature; this is the same as using the
	`enable` value for this option. Use the	`disable` value to
	remove each considered enlistment from background maintenance.
	Use `keep' to leave the background maintenance configuration
	untouched for these repositories.

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
