2021-01-03 14:25:43 +05:30
---
2021-02-22 17:27:13 +05:30
stage: Enablement
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
2021-01-03 14:25:43 +05:30
---
2021-06-08 01:23:25 +05:30
# Housekeeping **(FREE)**
2016-01-29 22:53:50 +05:30
2021-06-08 01:23:25 +05:30
GitLab supports and automates housekeeping tasks within your current repository,
such as compressing file revisions and removing unreachable objects.
2016-01-29 22:53:50 +05:30
2021-09-04 01:27:46 +05:30
## Configure housekeeping
2016-01-29 22:53:50 +05:30
2017-08-17 22:00:37 +05:30
GitLab automatically runs `git gc` and `git repack` on repositories
2021-09-04 01:27:46 +05:30
after Git pushes.
2016-01-29 22:53:50 +05:30
2021-09-04 01:27:46 +05:30
You can change how often this happens or turn it off:
2017-08-17 22:00:37 +05:30
2021-09-04 01:27:46 +05:30
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. Select **Save changes** .
2017-08-17 22:00:37 +05:30
2021-09-04 01:27:46 +05:30
For example, in the following scenario a `git repack -d` will be executed:
2017-08-17 22:00:37 +05:30
2020-04-08 14:13:33 +05:30
- Project: pushes since GC counter (`pushes_since_gc`) = `10`
2019-03-02 22:35:43 +05:30
- Git GC period = `200`
- Full repack period = `50`
2017-08-17 22:00:37 +05:30
2021-06-08 01:23:25 +05:30
When the `pushes_since_gc` value is 50 a `repack -A -d --pack-kept-objects` runs, similarly when
2021-09-04 01:27:46 +05:30
the `pushes_since_gc` value is 200 a `git gc` runs:
2017-08-17 22:00:37 +05:30
2019-12-21 20:55:43 +05:30
- `git gc` ([man page](https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git-gc.html)) runs a number of housekeeping tasks,
2020-04-08 14:13:33 +05:30
such as compressing file revisions (to reduce disk space and increase performance)
2019-03-02 22:35:43 +05:30
and removing unreachable objects which may have been created from prior invocations of
`git add` .
2019-12-21 20:55:43 +05:30
- `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.
2016-01-29 22:53:50 +05:30
2021-06-08 01:23:25 +05:30
Housekeeping also [removes unreferenced LFS files ](../raketasks/cleanup.md#remove-unreferenced-lfs-files )
2021-01-03 14:25:43 +05:30
from your project on the same schedule as the `git gc` operation, freeing up storage space for your project.
2021-03-08 18:12:59 +05:30
## How housekeeping handles pool repositories
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:
1. `Repositories::HousekeepingService#execute_gitlab_shell_gc`
2021-03-11 19:13:27 +05:30
1. `Projects::GitGarbageCollectWorker#perform`
2021-03-08 18:12:59 +05:30
1. `Projects::GitDeduplicationService#fetch_from_source`
1. `ObjectPool#fetch`
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` .
2021-06-08 01:23:25 +05:30
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.