| git-gc(1) | |
| ========= | |
| NAME | |
| ---- | |
| git-gc - Cleanup unnecessary files and optimize the local repository | |
| SYNOPSIS | |
| -------- | |
| 'git gc' [--aggressive] [--auto] [--quiet] | |
| DESCRIPTION | |
| ----------- | |
| Runs a number of housekeeping tasks within the current repository, | |
| 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'. | |
| Users are encouraged to run this task on a regular basis within | |
| each repository to maintain good disk space utilization and good | |
| operating performance. | |
| Some git commands may automatically run 'git-gc'; see the `--auto` flag | |
| below for details. If you know what you're doing and all you want is to | |
| disable this behavior permanently without further considerations, just do: | |
| ---------------------- | |
| $ git config --global gc.auto 0 | |
| ---------------------- | |
| OPTIONS | |
| ------- | |
| --aggressive:: | |
| Usually 'git-gc' runs very quickly while providing good disk | |
| space utilization and performance. This option will cause | |
| 'git-gc' to more aggressively optimize the repository at the expense | |
| of taking much more time. The effects of this optimization are | |
| persistent, so this option only needs to be used occasionally; every | |
| few hundred changesets or so. | |
| --auto:: | |
| With this option, 'git-gc' checks whether any housekeeping is | |
| required; if not, it exits without performing any work. | |
| Some git commands run `git gc --auto` after performing | |
| operations that could create many loose objects. | |
| + | |
| Housekeeping is required if there are too many loose objects or | |
| too many packs in the repository. If the number of loose objects | |
| exceeds the value of the `gc.auto` configuration variable, then | |
| all loose objects are combined into a single pack using | |
| 'git-repack -d -l'. Setting the value of `gc.auto` to 0 | |
| disables automatic packing of loose objects. | |
| + | |
| If the number of packs exceeds the value of `gc.autopacklimit`, | |
| then existing packs (except those marked with a `.keep` file) | |
| are consolidated into a single pack by using the `-A` option of | |
| 'git-repack'. Setting `gc.autopacklimit` to 0 disables | |
| automatic consolidation of packs. | |
| --quiet:: | |
| Suppress all progress reports. | |
| Configuration | |
| ------------- | |
| The optional configuration variable 'gc.reflogExpire' can be | |
| set to indicate how long historical entries within each branch's | |
| reflog should remain available in this repository. The setting is | |
| expressed as a length of time, for example '90 days' or '3 months'. | |
| It defaults to '90 days'. | |
| The optional configuration variable 'gc.reflogExpireUnreachable' | |
| can be set to indicate how long historical reflog entries which | |
| are not part of the current branch should remain available in | |
| this repository. These types of entries are generally created as | |
| a result of using `git commit \--amend` or `git rebase` and are the | |
| commits prior to the amend or rebase occurring. Since these changes | |
| are not part of the current project most users will want to expire | |
| them sooner. This option defaults to '30 days'. | |
| The optional configuration variable 'gc.rerereresolved' indicates | |
| how long records of conflicted merge you resolved earlier are | |
| kept. This defaults to 60 days. | |
| The optional configuration variable 'gc.rerereunresolved' indicates | |
| how long records of conflicted merge you have not resolved are | |
| kept. This defaults to 15 days. | |
| The optional configuration variable 'gc.packrefs' determines if | |
| 'git-gc' runs 'git-pack-refs'. This can be set to "nobare" to enable | |
| it within all non-bare repos or it can be set to a boolean value. | |
| This defaults to true. | |
| The optional configuration variable 'gc.aggressiveWindow' controls how | |
| much time is spent optimizing the delta compression of the objects in | |
| the repository when the --aggressive option is specified. The larger | |
| the value, the more time is spent optimizing the delta compression. See | |
| the documentation for the --window' option in linkgit:git-repack[1] for | |
| more details. This defaults to 10. | |
| The optional configuration variable 'gc.pruneExpire' controls how old | |
| the unreferenced loose objects have to be before they are pruned. The | |
| default is "2 weeks ago". | |
| Notes | |
| ----- | |
| 'git-gc' tries very hard to be safe about the garbage it collects. In | |
| particular, it will keep not only objects referenced by your current set | |
| of branches and tags, but also objects referenced by the index, remote | |
| tracking branches, refs saved by 'git-filter-branch' in | |
| refs/original/, or reflogs (which may references commits in branches | |
| that were later amended or rewound). | |
| If you are expecting some objects to be collected and they aren't, check | |
| all of those locations and decide whether it makes sense in your case to | |
| remove those references. | |
| SEE ALSO | |
| -------- | |
| linkgit:git-prune[1] | |
| linkgit:git-reflog[1] | |
| linkgit:git-repack[1] | |
| linkgit:git-rerere[1] | |
| Author | |
| ------ | |
| Written by Shawn O. Pearce <spearce@spearce.org> | |
| GIT | |
| --- | |
| Part of the linkgit:git[1] suite |