2020-10-19 20:09:22 -04:00
---
2022-05-29 20:08:35 -04:00
stage: Systems
2020-12-01 13:09:42 -05:00
group: Distribution
2022-09-21 17:13:33 -04:00
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
2020-10-19 20:09:22 -04:00
---
2021-07-05 02:08:01 -04:00
# Housekeeping **(FREE SELF)**
2016-01-11 11:11:22 -05:00
2022-07-06 05:08:10 -04:00
GitLab supports and automates housekeeping tasks in your current repository such as:
2021-07-05 02:08:01 -04:00
- Compressing Git objects.
- Removing unreachable objects.
2016-01-11 11:11:22 -05:00
2021-06-18 11:10:16 -04:00
## Configure housekeeping
2016-10-27 08:59:52 -04:00
2021-07-05 02:08:01 -04:00
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.
2016-10-27 08:59:52 -04:00
2021-06-18 11:10:16 -04:00
You can change how often this happens or turn it off:
2016-01-11 11:11:22 -05:00
2022-09-14 14:12:48 -04:00
1. On the top bar, select **Main menu > Admin** .
2021-06-18 11:10:16 -04:00
1. On the left sidebar, select **Settings > Repository** .
1. Expand **Repository maintenance** .
2021-07-05 02:08:01 -04:00
1. In the **Housekeeping** section, configure the [housekeeping options ](#housekeeping-options ).
2021-06-18 11:10:16 -04:00
1. Select **Save changes** .
2016-01-11 11:11:22 -05:00
2021-07-05 02:08:01 -04:00
### 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.
- **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:
2016-12-30 01:58:22 -05:00
2021-07-05 02:08:01 -04:00
- Incremental repack period: 10.
- Full repack period: 50.
- Git GC period: 200.
2016-12-30 01:58:22 -05:00
2021-07-05 02:08:01 -04:00
When the:
2016-12-30 01:58:22 -05:00
2021-07-05 02:08:01 -04:00
- `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.
2016-01-11 11:11:22 -05:00
2021-04-25 20:09:41 -04:00
Housekeeping also [removes unreferenced LFS files ](../raketasks/cleanup.md#remove-unreferenced-lfs-files )
2021-07-05 02:08:01 -04:00
from your project on the same schedule as the `git gc` operation, freeing up storage space for your
project.
2020-09-28 14:09:40 -04:00
2021-09-10 05:11:07 -04:00
WARNING:
Running `git gc` or `git repack` commands manually in the
[repository folder ](repository_storage_types.md#from-project-name-to-hashed-path )
is discouraged. If the created pack files get incorrect access rights (that is, owned by the wrong user)
browsing to the project page might result in `404` and `503` errors.
2021-01-14 13:10:59 -05:00
## How housekeeping handles pool repositories
2021-07-05 02:08:01 -04:00
Housekeeping for pool repositories is handled differently from standard repositories. It is
ultimately performed by the Gitaly RPC `FetchIntoObjectPool` .
2021-01-14 13:10:59 -05:00
This is the current call stack by which it is invoked:
2021-01-19 04:10:32 -05:00
1. `Repositories::HousekeepingService#execute_gitlab_shell_gc`
2021-01-21 07:09:05 -05:00
1. `Projects::GitGarbageCollectWorker#perform`
2021-01-14 13:10:59 -05:00
1. `Projects::GitDeduplicationService#fetch_from_source`
1. `ObjectPool#fetch`
1. `ObjectPoolService#fetch`
1. `Gitaly::FetchIntoObjectPoolRequest`
2021-09-10 05:11:07 -04:00
To manually invoke it from a [Rails console ](operations/rails_console.md ) if needed, you can call
2021-07-05 02:08:01 -04:00
`project.pool_repository.object_pool.fetch` . This is a potentially long-running task, though Gitaly
times out in about 8 hours.
2021-04-28 20:09:48 -04:00
WARNING:
2021-07-05 02:08:01 -04:00
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.