Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 1 | git-gc(1) |
| 2 | ========= |
| 3 | |
| 4 | NAME |
| 5 | ---- |
| 6 | git-gc - Cleanup unnecessary files and optimize the local repository |
| 7 | |
| 8 | |
| 9 | SYNOPSIS |
| 10 | -------- |
Junio C Hamano | 15567bc | 2011-07-23 00:51:59 | [diff] [blame] | 11 | [verse] |
Junio C Hamano | 535ed7a | 2013-09-04 20:35:57 | [diff] [blame] | 12 | 'git gc' [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune] [--force] |
Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 13 | |
| 14 | DESCRIPTION |
| 15 | ----------- |
| 16 | Runs a number of housekeeping tasks within the current repository, |
| 17 | such as compressing file revisions (to reduce disk space and increase |
| 18 | performance) and removing unreachable objects which may have been |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 19 | created from prior invocations of 'git add'. |
Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 20 | |
| 21 | Users are encouraged to run this task on a regular basis within |
| 22 | each repository to maintain good disk space utilization and good |
Junio C Hamano | d04b60c | 2008-03-20 08:46:04 | [diff] [blame] | 23 | operating performance. |
| 24 | |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 25 | Some git commands may automatically run 'git gc'; see the `--auto` flag |
Junio C Hamano | d04b60c | 2008-03-20 08:46:04 | [diff] [blame] | 26 | below for details. If you know what you're doing and all you want is to |
| 27 | disable this behavior permanently without further considerations, just do: |
| 28 | |
| 29 | ---------------------- |
| 30 | $ git config --global gc.auto 0 |
| 31 | ---------------------- |
Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 32 | |
Junio C Hamano | f65d928 | 2007-01-22 09:00:13 | [diff] [blame] | 33 | OPTIONS |
| 34 | ------- |
| 35 | |
Junio C Hamano | f2ce297 | 2007-05-20 19:12:09 | [diff] [blame] | 36 | --aggressive:: |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 37 | Usually 'git gc' runs very quickly while providing good disk |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 38 | space utilization and performance. This option will cause |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 39 | 'git gc' to more aggressively optimize the repository at the expense |
Junio C Hamano | f2ce297 | 2007-05-20 19:12:09 | [diff] [blame] | 40 | of taking much more time. The effects of this optimization are |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 41 | persistent, so this option only needs to be used occasionally; every |
Junio C Hamano | f2ce297 | 2007-05-20 19:12:09 | [diff] [blame] | 42 | few hundred changesets or so. |
Junio C Hamano | f65d928 | 2007-01-22 09:00:13 | [diff] [blame] | 43 | |
Junio C Hamano | 1b50ce9 | 2007-10-03 12:05:53 | [diff] [blame] | 44 | --auto:: |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 45 | With this option, 'git gc' checks whether any housekeeping is |
Junio C Hamano | 764a667 | 2007-10-23 01:23:31 | [diff] [blame] | 46 | required; if not, it exits without performing any work. |
| 47 | Some git commands run `git gc --auto` after performing |
| 48 | operations that could create many loose objects. |
| 49 | + |
| 50 | Housekeeping is required if there are too many loose objects or |
| 51 | too many packs in the repository. If the number of loose objects |
| 52 | exceeds the value of the `gc.auto` configuration variable, then |
| 53 | all loose objects are combined into a single pack using |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 54 | `git repack -d -l`. Setting the value of `gc.auto` to 0 |
Junio C Hamano | 764a667 | 2007-10-23 01:23:31 | [diff] [blame] | 55 | disables automatic packing of loose objects. |
| 56 | + |
Junio C Hamano | 322c624 | 2015-03-23 21:32:46 | [diff] [blame] | 57 | If the number of packs exceeds the value of `gc.autoPackLimit`, |
Junio C Hamano | 764a667 | 2007-10-23 01:23:31 | [diff] [blame] | 58 | then existing packs (except those marked with a `.keep` file) |
| 59 | are consolidated into a single pack by using the `-A` option of |
Junio C Hamano | 322c624 | 2015-03-23 21:32:46 | [diff] [blame] | 60 | 'git repack'. Setting `gc.autoPackLimit` to 0 disables |
Junio C Hamano | 764a667 | 2007-10-23 01:23:31 | [diff] [blame] | 61 | automatic consolidation of packs. |
Junio C Hamano | 1b50ce9 | 2007-10-03 12:05:53 | [diff] [blame] | 62 | |
Junio C Hamano | 8bc410e | 2009-02-15 10:38:19 | [diff] [blame] | 63 | --prune=<date>:: |
| 64 | Prune loose objects older than date (default is 2 weeks ago, |
Junio C Hamano | c710296 | 2013-05-29 23:57:17 | [diff] [blame] | 65 | overridable by the config variable `gc.pruneExpire`). |
Junio C Hamano | 2990bb5 | 2015-10-16 22:07:58 | [diff] [blame] | 66 | --prune=all prunes loose objects regardless of their age (do |
| 67 | not use --prune=all unless you know exactly what you are doing. |
| 68 | Unless the repository is quiescent, you will lose newly created |
| 69 | objects that haven't been anchored with the refs and end up |
| 70 | corrupting your repository). --prune is on by default. |
Junio C Hamano | 8bc410e | 2009-02-15 10:38:19 | [diff] [blame] | 71 | |
| 72 | --no-prune:: |
| 73 | Do not prune any loose objects. |
| 74 | |
Junio C Hamano | 69a9858 | 2008-03-01 18:42:18 | [diff] [blame] | 75 | --quiet:: |
| 76 | Suppress all progress reports. |
| 77 | |
Junio C Hamano | 535ed7a | 2013-09-04 20:35:57 | [diff] [blame] | 78 | --force:: |
| 79 | Force `git gc` to run even if there may be another `git gc` |
| 80 | instance running on this repository. |
| 81 | |
Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 82 | Configuration |
| 83 | ------------- |
| 84 | |
| 85 | The optional configuration variable 'gc.reflogExpire' can be |
| 86 | set to indicate how long historical entries within each branch's |
| 87 | reflog should remain available in this repository. The setting is |
| 88 | expressed as a length of time, for example '90 days' or '3 months'. |
| 89 | It defaults to '90 days'. |
| 90 | |
| 91 | The optional configuration variable 'gc.reflogExpireUnreachable' |
| 92 | can be set to indicate how long historical reflog entries which |
| 93 | are not part of the current branch should remain available in |
| 94 | this repository. These types of entries are generally created as |
Junio C Hamano | b76a686 | 2012-05-02 22:02:46 | [diff] [blame] | 95 | a result of using `git commit --amend` or `git rebase` and are the |
Junio C Hamano | f9771f6 | 2007-01-17 17:42:30 | [diff] [blame] | 96 | commits prior to the amend or rebase occurring. Since these changes |
Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 97 | are not part of the current project most users will want to expire |
| 98 | them sooner. This option defaults to '30 days'. |
| 99 | |
Junio C Hamano | cc7636a | 2010-05-21 14:57:53 | [diff] [blame] | 100 | The above two configuration variables can be given to a pattern. For |
Junio C Hamano | 97bcb48 | 2010-11-25 03:16:07 | [diff] [blame] | 101 | example, this sets non-default expiry values only to remote-tracking |
Junio C Hamano | cc7636a | 2010-05-21 14:57:53 | [diff] [blame] | 102 | branches: |
| 103 | |
| 104 | ------------ |
| 105 | [gc "refs/remotes/*"] |
| 106 | reflogExpire = never |
Junio C Hamano | 322c624 | 2015-03-23 21:32:46 | [diff] [blame] | 107 | reflogExpireUnreachable = 3 days |
Junio C Hamano | cc7636a | 2010-05-21 14:57:53 | [diff] [blame] | 108 | ------------ |
| 109 | |
Junio C Hamano | 322c624 | 2015-03-23 21:32:46 | [diff] [blame] | 110 | The optional configuration variable 'gc.rerereResolved' indicates |
Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 111 | how long records of conflicted merge you resolved earlier are |
| 112 | kept. This defaults to 60 days. |
| 113 | |
Junio C Hamano | 322c624 | 2015-03-23 21:32:46 | [diff] [blame] | 114 | The optional configuration variable 'gc.rerereUnresolved' indicates |
Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 115 | how long records of conflicted merge you have not resolved are |
| 116 | kept. This defaults to 15 days. |
| 117 | |
Junio C Hamano | 322c624 | 2015-03-23 21:32:46 | [diff] [blame] | 118 | The optional configuration variable 'gc.packRefs' determines if |
Junio C Hamano | cdd1c33 | 2010-12-20 10:08:00 | [diff] [blame] | 119 | 'git gc' runs 'git pack-refs'. This can be set to "notbare" to enable |
Junio C Hamano | e77b015 | 2008-01-12 06:44:17 | [diff] [blame] | 120 | it within all non-bare repos or it can be set to a boolean value. |
| 121 | This defaults to true. |
Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 122 | |
Junio C Hamano | f2ce297 | 2007-05-20 19:12:09 | [diff] [blame] | 123 | The optional configuration variable 'gc.aggressiveWindow' controls how |
| 124 | much time is spent optimizing the delta compression of the objects in |
| 125 | the repository when the --aggressive option is specified. The larger |
| 126 | the value, the more time is spent optimizing the delta compression. See |
Junio C Hamano | 35738e8 | 2008-01-07 07:55:46 | [diff] [blame] | 127 | the documentation for the --window' option in linkgit:git-repack[1] for |
Junio C Hamano | ae4a8f3 | 2009-10-04 09:54:54 | [diff] [blame] | 128 | more details. This defaults to 250. |
Junio C Hamano | f2ce297 | 2007-05-20 19:12:09 | [diff] [blame] | 129 | |
Junio C Hamano | 624dd4c | 2014-04-03 21:56:30 | [diff] [blame] | 130 | Similarly, the optional configuration variable 'gc.aggressiveDepth' |
| 131 | controls --depth option in linkgit:git-repack[1]. This defaults to 250. |
| 132 | |
Junio C Hamano | 09a926d | 2008-03-13 07:55:29 | [diff] [blame] | 133 | The optional configuration variable 'gc.pruneExpire' controls how old |
| 134 | the unreferenced loose objects have to be before they are pruned. The |
| 135 | default is "2 weeks ago". |
| 136 | |
Junio C Hamano | 2f102bb | 2008-04-26 02:23:37 | [diff] [blame] | 137 | |
| 138 | Notes |
| 139 | ----- |
| 140 | |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 141 | 'git gc' tries very hard to be safe about the garbage it collects. In |
Junio C Hamano | 2f102bb | 2008-04-26 02:23:37 | [diff] [blame] | 142 | particular, it will keep not only objects referenced by your current set |
Junio C Hamano | 97bcb48 | 2010-11-25 03:16:07 | [diff] [blame] | 143 | of branches and tags, but also objects referenced by the index, |
| 144 | remote-tracking branches, refs saved by 'git filter-branch' in |
Junio C Hamano | 4232bc4 | 2009-10-20 07:49:31 | [diff] [blame] | 145 | refs/original/, or reflogs (which may reference commits in branches |
Junio C Hamano | 2f102bb | 2008-04-26 02:23:37 | [diff] [blame] | 146 | that were later amended or rewound). |
| 147 | |
| 148 | If you are expecting some objects to be collected and they aren't, check |
| 149 | all of those locations and decide whether it makes sense in your case to |
| 150 | remove those references. |
| 151 | |
Junio C Hamano | 3e3aa81 | 2010-07-05 23:25:23 | [diff] [blame] | 152 | HOOKS |
| 153 | ----- |
| 154 | |
| 155 | The 'git gc --auto' command will run the 'pre-auto-gc' hook. See |
| 156 | linkgit:githooks[5] for more information. |
| 157 | |
| 158 | |
Junio C Hamano | 9049d91 | 2008-05-29 02:09:50 | [diff] [blame] | 159 | SEE ALSO |
Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 160 | -------- |
Junio C Hamano | 35738e8 | 2008-01-07 07:55:46 | [diff] [blame] | 161 | linkgit:git-prune[1] |
| 162 | linkgit:git-reflog[1] |
| 163 | linkgit:git-repack[1] |
| 164 | linkgit:git-rerere[1] |
Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 165 | |
Junio C Hamano | 5229946 | 2006-12-28 00:59:38 | [diff] [blame] | 166 | GIT |
| 167 | --- |
Junio C Hamano | f7c042d | 2008-06-06 22:50:53 | [diff] [blame] | 168 | Part of the linkgit:git[1] suite |