mirror of
https://github.com/git/git.git
synced 2024-10-28 12:59:41 +01:00
98077d06b2
In the past, we used to execute `git gc --auto` as part of our automatic housekeeping routines. As git-gc(1) may require quite some time to perform the housekeeping, it knows to detach itself and run in the background so that the user can continue their work. Eventually, we refactored our automatic housekeeping to instead use the more flexible git-maintenance(1) command. The upside of this new infra is that the user can configure which maintenance tasks are performed, at least to a certain degree. So while it continues to run git-gc(1) by default, it can also be adapted to e.g. use git-multi-pack-index(1) for maintenance of the object database. The auto-detach of the new infra is somewhat broken though once the user configures non-standard tasks. The problem is essentially that we detach at the wrong level in the process hierarchy: git-maintenance(1) never detaches itself, but instead it continues to be git-gc(1) which does. When configured to only run the git-gc(1) maintenance task, then the result is basically the same as before. But when configured to run other tasks, then git-maintenance(1) will wait for these to run to completion. Even worse, it may be that git-gc(1) runs concurrently with other housekeeping tasks, stomping on each others feet. Fix this bug by asking git-gc(1) to not detach when it is being invoked via git-maintenance(1). Instead, git-maintenance(1) now respects a new config "maintenance.autoDetach", the equivalent of "gc.autoDetach", and detaches itself into the background when running as part of our auto maintenance. This should continue to behave the same for all users which use the git-gc(1) task, only. For others though, it means that we now properly perform all tasks in the background. The default behaviour of git-maintenance(1) when executed by the user does not change, it will remain in the foreground unless they pass the `--detach` option. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
71 lines
3.4 KiB
Text
71 lines
3.4 KiB
Text
maintenance.auto::
|
|
This boolean config option controls whether some commands run
|
|
`git maintenance run --auto` after doing their normal work. Defaults
|
|
to true.
|
|
|
|
maintenance.autoDetach::
|
|
Many Git commands trigger automatic maintenance after they have
|
|
written data into the repository. This boolean config option
|
|
controls whether this automatic maintenance shall happen in the
|
|
foreground or whether the maintenance process shall detach and
|
|
continue to run in the background.
|
|
+
|
|
If unset, the value of `gc.autoDetach` is used as a fallback. Defaults
|
|
to true if both are unset, meaning that the maintenance process will
|
|
detach.
|
|
|
|
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 tasks 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.
|