summaryrefslogtreecommitdiff
path: root/doc/administration/housekeeping.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/administration/housekeeping.md')
-rw-r--r--doc/administration/housekeeping.md72
1 files changed, 47 insertions, 25 deletions
diff --git a/doc/administration/housekeeping.md b/doc/administration/housekeeping.md
index a89e8a2bad5..8f5bf2ee013 100644
--- a/doc/administration/housekeeping.md
+++ b/doc/administration/housekeeping.md
@@ -4,46 +4,68 @@ group: Distribution
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Housekeeping **(FREE)**
+# Housekeeping **(FREE SELF)**
-GitLab supports and automates housekeeping tasks within your current repository,
-such as compressing file revisions and removing unreachable objects.
+GitLab supports and automates housekeeping tasks within your current repository such as:
+
+- Compressing Git objects.
+- Removing unreachable objects.
## Configure housekeeping
-GitLab automatically runs `git gc` and `git repack` on repositories
-after Git pushes.
+GitLab automatically runs `git gc` and `git repack` on repositories after Git pushes:
+
+- [`git gc`](https://git-scm.com/docs/git-gc) runs a number of housekeeping tasks such as:
+ - Compressing Git objects to reduce disk space and increase performance.
+ - Removing unreachable objects that may have been created from changes to the repository, like force-overwriting branches.
+- [`git repack`](https://git-scm.com/docs/git-repack) either:
+ - Runs an incremental repack, according to a [configured period](#housekeeping-options). This
+ packs all loose objects into a new packfile and prunes the now-redundant loose objects.
+ - Runs a full repack, according to a [configured period](#housekeeping-options). This repacks all
+ packfiles and loose objects into a single new packfile, and deletes the old now-redundant loose
+ objects and packfiles. It also optionally creates bitmaps for the new packfile.
You can change how often this happens or turn it off:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Repository**.
1. Expand **Repository maintenance**.
-1. Configure the Housekeeping options.
+1. In the **Housekeeping** section, configure the [housekeeping options](#housekeeping-options).
1. Select **Save changes**.
-For example, in the following scenario a `git repack -d` will be executed:
+### Housekeeping options
+
+The following housekeeping options are available:
+
+- **Enable automatic repository housekeeping**: Regularly run `git repack` and `git gc`. If you
+ keep this setting disabled for a long time, Git repository access on your GitLab server becomes
+ slower and your repositories use more disk space.
+- **Enable Git pack file bitmap creation**: Create pack file bitmaps which accelerates `git clone`
+ performance. Makes housekeeping take a little longer.
+- **Incremental repack period**: Number of Git pushes after which an incremental `git repack` is
+ run.
+- **Full repack period**: Number of Git pushes after which a full `git repack` is run.
+- **Git GC period**: Number of Git pushes after which `git gc` is run.
+
+As an example, see the following scenario:
-- Project: pushes since GC counter (`pushes_since_gc`) = `10`
-- Git GC period = `200`
-- Full repack period = `50`
+- Incremental repack period: 10.
+- Full repack period: 50.
+- Git GC period: 200.
-When the `pushes_since_gc` value is 50 a `repack -A -d --pack-kept-objects` runs, similarly when
-the `pushes_since_gc` value is 200 a `git gc` runs:
+When the:
-- `git gc` ([man page](https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git-gc.html)) runs a number of housekeeping tasks,
- such as compressing file revisions (to reduce disk space and increase performance)
- and removing unreachable objects which may have been created from prior invocations of
- `git add`.
-- `git repack` ([man page](https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git-repack.html)) re-organize existing packs into a single, more efficient pack.
+- `pushes_since_gc` value is 50, a `repack -A -l -d --pack-kept-objects` runs.
+- `pushes_since_gc` value is 200, a `git gc` runs.
Housekeeping also [removes unreferenced LFS files](../raketasks/cleanup.md#remove-unreferenced-lfs-files)
-from your project on the same schedule as the `git gc` operation, freeing up storage space for your project.
+from your project on the same schedule as the `git gc` operation, freeing up storage space for your
+project.
## How housekeeping handles pool repositories
-Housekeeping for pool repositories is handled differently from standard repositories.
-It is ultimately performed by the Gitaly RPC `FetchIntoObjectPool`.
+Housekeeping for pool repositories is handled differently from standard repositories. It is
+ultimately performed by the Gitaly RPC `FetchIntoObjectPool`.
This is the current call stack by which it is invoked:
@@ -54,10 +76,10 @@ This is the current call stack by which it is invoked:
1. `ObjectPoolService#fetch`
1. `Gitaly::FetchIntoObjectPoolRequest`
-To manually invoke it from a Rails console, if needed, you can call `project.pool_repository.object_pool.fetch`.
-This is a potentially long-running task, though Gitaly times out in about 8 hours.
+To manually invoke it from a Rails console if needed, you can call
+`project.pool_repository.object_pool.fetch`. This is a potentially long-running task, though Gitaly
+times out in about 8 hours.
WARNING:
-Do not run `git prune` or `git gc` in pool repositories! This can
-cause data loss in "real" repositories that depend on the pool in
-question.
+Do not run `git prune` or `git gc` in pool repositories! This can cause data loss in "real"
+repositories that depend on the pool in question.