Housekeeping (FREE SELF)
GitLab supports and automates housekeeping tasks in 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:
- 
git gcruns 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 repackeither:- Runs an incremental repack, according to a configured period. 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. 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:
- On the top bar, select Main menu > Admin.
 - On the left sidebar, select Settings > Repository.
 - Expand Repository maintenance.
 - In the Housekeeping section, configure the housekeeping options.
 - Select Save changes.
 
Housekeeping options
The following housekeeping options are available:
- 
Enable automatic repository housekeeping: Regularly run 
git repackandgit 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 repackis run. - 
Full repack period: Number of Git pushes after which a full 
git repackis run. - 
Git GC period: Number of Git pushes after which 
git gcis run. 
As an example, see the following scenario:
- Incremental repack period: 10.
 - Full repack period: 50.
 - Git GC period: 200.
 
When the:
- 
pushes_since_gcvalue is 50, arepack -A -l -d --pack-kept-objectsruns. - 
pushes_since_gcvalue is 200, agit gcruns. 
Housekeeping also removes unreferenced LFS files
from your project on the same schedule as the git gc operation, freeing up storage space for your
project.
WARNING:
Running git gc or git repack commands manually in the
repository folder
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.
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:
Repositories::HousekeepingService#execute_gitlab_shell_gcProjects::GitGarbageCollectWorker#performProjects::GitDeduplicationService#fetch_from_sourceObjectPool#fetchObjectPoolService#fetchGitaly::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.
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.