gc.aggressiveDepth::
	The depth parameter used in the delta compression
	algorithm used by 'git gc --aggressive'.  This defaults
	to 50.

gc.aggressiveWindow::
	The window size parameter used in the delta compression
	algorithm used by 'git gc --aggressive'.  This defaults
	to 250.

gc.auto::
	When there are approximately more than this many loose
	objects in the repository, `git gc --auto` will pack them.
	Some Porcelain commands use this command to perform a
	light-weight garbage collection from time to time.  The
	default value is 6700.  Setting this to 0 disables it.

gc.autoPackLimit::
	When there are more than this many packs that are not
	marked with `*.keep` file in the repository, `git gc
	--auto` consolidates them into one larger pack.  The
	default	value is 50.  Setting this to 0 disables it.

gc.autoDetach::
	Make `git gc --auto` return immediately and run in background
	if the system supports it. Default is true.

gc.bigPackThreshold::
	If non-zero, all packs larger than this limit are kept when
	`git gc` is run. This is very similar to `--keep-base-pack`
	except that all packs that meet the threshold are kept, not
	just the base pack. Defaults to zero. Common unit suffixes of
	'k', 'm', or 'g' are supported.
+
Note that if the number of kept packs is more than gc.autoPackLimit,
this configuration variable is ignored, all packs except the base pack
will be repacked. After this the number of packs should go below
gc.autoPackLimit and gc.bigPackThreshold should be respected again.

gc.writeCommitGraph::
	If true, then gc will rewrite the commit-graph file when
	linkgit:git-gc[1] is run. When using linkgit:git-gc[1]
	'--auto' the commit-graph will be updated if housekeeping is
	required. Default is false. See linkgit:git-commit-graph[1]
	for details.

gc.logExpiry::
	If the file gc.log exists, then `git gc --auto` will print
	its content and exit with status zero instead of running
	unless that file is more than 'gc.logExpiry' old.  Default is
	"1.day".  See `gc.pruneExpire` for more ways to specify its
	value.

gc.packRefs::
	Running `git pack-refs` in a repository renders it
	unclonable by Git versions prior to 1.5.1.2 over dumb
	transports such as HTTP.  This variable determines whether
	'git gc' runs `git pack-refs`. This can be set to `notbare`
	to enable it within all non-bare repos or it can be set to a
	boolean value.  The default is `true`.

gc.pruneExpire::
	When 'git gc' is run, it will call 'prune --expire 2.weeks.ago'.
	Override the grace period with this config variable.  The value
	"now" may be used to disable this grace period and always prune
	unreachable objects immediately, or "never" may be used to
	suppress pruning.  This feature helps prevent corruption when
	'git gc' runs concurrently with another process writing to the
	repository; see the "NOTES" section of linkgit:git-gc[1].

gc.worktreePruneExpire::
	When 'git gc' is run, it calls
	'git worktree prune --expire 3.months.ago'.
	This config variable can be used to set a different grace
	period. The value "now" may be used to disable the grace
	period and prune `$GIT_DIR/worktrees` immediately, or "never"
	may be used to suppress pruning.

gc.reflogExpire::
gc.<pattern>.reflogExpire::
	'git reflog expire' removes reflog entries older than
	this time; defaults to 90 days. The value "now" expires all
	entries immediately, and "never" suppresses expiration
	altogether. With "<pattern>" (e.g.
	"refs/stash") in the middle the setting applies only to
	the refs that match the <pattern>.

gc.reflogExpireUnreachable::
gc.<pattern>.reflogExpireUnreachable::
	'git reflog expire' removes reflog entries older than
	this time and are not reachable from the current tip;
	defaults to 30 days. The value "now" expires all entries
	immediately, and "never" suppresses expiration altogether.
	With "<pattern>" (e.g. "refs/stash")
	in the middle, the setting applies only to the refs that
	match the <pattern>.

gc.rerereResolved::
	Records of conflicted merge you resolved earlier are
	kept for this many days when 'git rerere gc' is run.
	You can also use more human-readable "1.month.ago", etc.
	The default is 60 days.  See linkgit:git-rerere[1].

gc.rerereUnresolved::
	Records of conflicted merge you have not resolved are
	kept for this many days when 'git rerere gc' is run.
	You can also use more human-readable "1.month.ago", etc.
	The default is 15 days.  See linkgit:git-rerere[1].
