GitLab supports and automates housekeeping tasks within your current repository such as:
- Compressing Git objects.
- Removing unreachable objects.
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.
- 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 Menu > Admin.
- On the left sidebar, select Settings > Repository.
- Expand Repository maintenance.
- In the Housekeeping section, configure the housekeeping options.
- Select Save changes.
The following housekeeping options are available:
Enable automatic repository housekeeping: Regularly run
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 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.
pushes_since_gcvalue is 50, a
repack -A -l -d --pack-kept-objectsruns.
pushes_since_gcvalue is 200, a
Housekeeping also removes unreferenced LFS files
from your project on the same schedule as the
git gc operation, freeing up storage space for your
git repackcommands 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
Housekeeping for pool repositories is handled differently from standard repositories. It is
ultimately performed by the Gitaly RPC
This is the current call stack by which it is invoked:
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.
git gcin pool repositories! This can cause data loss in “real” repositories that depend on the pool in question.