feature.*::
	The config settings that start with `feature.` modify the defaults of
	a group of other config settings. These groups are created by the Git
	developer community as recommended defaults and are subject to change.
	In particular, new config options may be added with different defaults.

feature.experimental::
	Enable config options that are new to Git, and are being considered for
	future defaults. Config settings included here may be added or removed
	with each release, including minor version updates. These settings may
	have unintended interactions since they are so new. Please enable this
	setting if you are interested in providing feedback on experimental
	features. The new default values are:
+
* `fetch.negotiationAlgorithm=skipping` may improve fetch negotiation times by
skipping more commits at a time, reducing the number of round trips.
+
* `pack.useBitmapBoundaryTraversal=true` may improve bitmap traversal times by
walking fewer objects.

feature.manyFiles::
	Enable config options that optimize for repos with many files in the
	working directory. With many files, commands such as `git status` and
	`git checkout` may be slow and these new defaults improve performance:
+
* `index.skipHash=true` speeds up index writes by not computing a trailing
  checksum. Note that this will cause Git versions earlier than 2.13.0 to
  refuse to parse the index and Git versions earlier than 2.40.0 will report
  a corrupted index during `git fsck`.
+
* `index.version=4` enables path-prefix compression in the index.
+
* `core.untrackedCache=true` enables the untracked cache. This setting assumes
that mtime is working on your machine.
