maintenance.auto::
	This boolean config option controls whether some commands run
	`git maintenance run --auto` after doing their normal work. Defaults
	to true.

maintenance.strategy::
	This string config option provides a way to specify one of a few
	recommended schedules for background maintenance. This only affects
	which tasks are run during `git maintenance run --schedule=X`
	commands, provided no `--task=<task>` arguments are provided.
	Further, if a `maintenance.<task>.schedule` config value is set,
	then that value is used instead of the one provided by
	`maintenance.strategy`. The possible strategy strings are:
+
* `none`: This default setting implies no task are run at any schedule.
* `incremental`: This setting optimizes for performing small maintenance
  activities that do not delete any data. This does not schedule the `gc`
  task, but runs the `prefetch` and `commit-graph` tasks hourly, the
  `loose-objects` and `incremental-repack` tasks daily, and the `pack-refs`
  task weekly.

maintenance.<task>.enabled::
	This boolean config option controls whether the maintenance task
	with name `<task>` is run when no `--task` option is specified to
	`git maintenance run`. These config values are ignored if a
	`--task` option exists. By default, only `maintenance.gc.enabled`
	is true.

maintenance.<task>.schedule::
	This config option controls whether or not the given `<task>` runs
	during a `git maintenance run --schedule=<frequency>` command. The
	value must be one of "hourly", "daily", or "weekly".

maintenance.commit-graph.auto::
	This integer config option controls how often the `commit-graph` task
	should be run as part of `git maintenance run --auto`. If zero, then
	the `commit-graph` task will not run with the `--auto` option. A
	negative value will force the task to run every time. Otherwise, a
	positive value implies the command should run when the number of
	reachable commits that are not in the commit-graph file is at least
	the value of `maintenance.commit-graph.auto`. The default value is
	100.

maintenance.loose-objects.auto::
	This integer config option controls how often the `loose-objects` task
	should be run as part of `git maintenance run --auto`. If zero, then
	the `loose-objects` task will not run with the `--auto` option. A
	negative value will force the task to run every time. Otherwise, a
	positive value implies the command should run when the number of
	loose objects is at least the value of `maintenance.loose-objects.auto`.
	The default value is 100.

maintenance.incremental-repack.auto::
	This integer config option controls how often the `incremental-repack`
	task should be run as part of `git maintenance run --auto`. If zero,
	then the `incremental-repack` task will not run with the `--auto`
	option. A negative value will force the task to run every time.
	Otherwise, a positive value implies the command should run when the
	number of pack-files not in the multi-pack-index is at least the value
	of `maintenance.incremental-repack.auto`. The default value is 10.
