Merge branch 'nd/per-worktree-config'
authorJunio C Hamano <gitster@pobox.com>
Tue, 13 Nov 2018 13:37:18 +0000 (22:37 +0900)
committerJunio C Hamano <gitster@pobox.com>
Tue, 13 Nov 2018 13:37:18 +0000 (22:37 +0900)
A fourth class of configuration files (in addition to the
traditional "system wide", "per user in the $HOME directory" and
"per repository in the $GIT_DIR/config") has been introduced so
that different worktrees that share the same repository (hence the
same $GIT_DIR/config file) can use different customization.

* nd/per-worktree-config:
  worktree: add per-worktree config files
  t1300: extract and use test_cmp_config()

1  2 
Documentation/config.txt
Documentation/git-worktree.txt
cache.h

@@@ -287,152 -288,2866 +288,159 @@@ inventing new variables for use in you
  names do not conflict with those that are used by Git itself and
  other popular tools, and describe them in your documentation.
  
 +include::config/advice.txt[]
  
 -advice.*::
 -      These variables control various optional help messages designed to
 -      aid new users. All 'advice.*' variables default to 'true', and you
 -      can tell Git that you do not need help by setting these to 'false':
 -+
 ---
 -      pushUpdateRejected::
 -              Set this variable to 'false' if you want to disable
 -              'pushNonFFCurrent',
 -              'pushNonFFMatching', 'pushAlreadyExists',
 -              'pushFetchFirst', and 'pushNeedsForce'
 -              simultaneously.
 -      pushNonFFCurrent::
 -              Advice shown when linkgit:git-push[1] fails due to a
 -              non-fast-forward update to the current branch.
 -      pushNonFFMatching::
 -              Advice shown when you ran linkgit:git-push[1] and pushed
 -              'matching refs' explicitly (i.e. you used ':', or
 -              specified a refspec that isn't your current branch) and
 -              it resulted in a non-fast-forward error.
 -      pushAlreadyExists::
 -              Shown when linkgit:git-push[1] rejects an update that
 -              does not qualify for fast-forwarding (e.g., a tag.)
 -      pushFetchFirst::
 -              Shown when linkgit:git-push[1] rejects an update that
 -              tries to overwrite a remote ref that points at an
 -              object we do not have.
 -      pushNeedsForce::
 -              Shown when linkgit:git-push[1] rejects an update that
 -              tries to overwrite a remote ref that points at an
 -              object that is not a commit-ish, or make the remote
 -              ref point at an object that is not a commit-ish.
 -      statusHints::
 -              Show directions on how to proceed from the current
 -              state in the output of linkgit:git-status[1], in
 -              the template shown when writing commit messages in
 -              linkgit:git-commit[1], and in the help message shown
 -              by linkgit:git-checkout[1] when switching branch.
 -      statusUoption::
 -              Advise to consider using the `-u` option to linkgit:git-status[1]
 -              when the command takes more than 2 seconds to enumerate untracked
 -              files.
 -      commitBeforeMerge::
 -              Advice shown when linkgit:git-merge[1] refuses to
 -              merge to avoid overwriting local changes.
 -      resolveConflict::
 -              Advice shown by various commands when conflicts
 -              prevent the operation from being performed.
 -      implicitIdentity::
 -              Advice on how to set your identity configuration when
 -              your information is guessed from the system username and
 -              domain name.
 -      detachedHead::
 -              Advice shown when you used linkgit:git-checkout[1] to
 -              move to the detach HEAD state, to instruct how to create
 -              a local branch after the fact.
 -      checkoutAmbiguousRemoteBranchName::
 -              Advice shown when the argument to
 -              linkgit:git-checkout[1] ambiguously resolves to a
 -              remote tracking branch on more than one remote in
 -              situations where an unambiguous argument would have
 -              otherwise caused a remote-tracking branch to be
 -              checked out. See the `checkout.defaultRemote`
 -              configuration variable for how to set a given remote
 -              to used by default in some situations where this
 -              advice would be printed.
 -      amWorkDir::
 -              Advice that shows the location of the patch file when
 -              linkgit:git-am[1] fails to apply it.
 -      rmHints::
 -              In case of failure in the output of linkgit:git-rm[1],
 -              show directions on how to proceed from the current state.
 -      addEmbeddedRepo::
 -              Advice on what to do when you've accidentally added one
 -              git repo inside of another.
 -      ignoredHook::
 -              Advice shown if a hook is ignored because the hook is not
 -              set as executable.
 -      waitingForEditor::
 -              Print a message to the terminal whenever Git is waiting for
 -              editor input from the user.
 ---
 +include::config/core.txt[]
  
 -core.fileMode::
 -      Tells Git if the executable bit of files in the working tree
 -      is to be honored.
 -+
 -Some filesystems lose the executable bit when a file that is
 -marked as executable is checked out, or checks out a
 -non-executable file with executable bit on.
 -linkgit:git-clone[1] or linkgit:git-init[1] probe the filesystem
 -to see if it handles the executable bit correctly
 -and this variable is automatically set as necessary.
 -+
 -A repository, however, may be on a filesystem that handles
 -the filemode correctly, and this variable is set to 'true'
 -when created, but later may be made accessible from another
 -environment that loses the filemode (e.g. exporting ext4 via
 -CIFS mount, visiting a Cygwin created repository with
 -Git for Windows or Eclipse).
 -In such a case it may be necessary to set this variable to 'false'.
 -See linkgit:git-update-index[1].
 -+
 -The default is true (when core.filemode is not specified in the config file).
 -
 -core.hideDotFiles::
 -      (Windows-only) If true, mark newly-created directories and files whose
 -      name starts with a dot as hidden.  If 'dotGitOnly', only the `.git/`
 -      directory is hidden, but no other files starting with a dot.  The
 -      default mode is 'dotGitOnly'.
 -
 -core.ignoreCase::
 -      Internal variable which enables various workarounds to enable
 -      Git to work better on filesystems that are not case sensitive,
 -      like APFS, HFS+, FAT, NTFS, etc. For example, if a directory listing
 -      finds "makefile" when Git expects "Makefile", Git will assume
 -      it is really the same file, and continue to remember it as
 -      "Makefile".
 -+
 -The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
 -will probe and set core.ignoreCase true if appropriate when the repository
 -is created.
 -+
 -Git relies on the proper configuration of this variable for your operating
 -and file system. Modifying this value may result in unexpected behavior.
 -
 -core.precomposeUnicode::
 -      This option is only used by Mac OS implementation of Git.
 -      When core.precomposeUnicode=true, Git reverts the unicode decomposition
 -      of filenames done by Mac OS. This is useful when sharing a repository
 -      between Mac OS and Linux or Windows.
 -      (Git for Windows 1.7.10 or higher is needed, or Git under cygwin 1.7).
 -      When false, file names are handled fully transparent by Git,
 -      which is backward compatible with older versions of Git.
 -
 -core.protectHFS::
 -      If set to true, do not allow checkout of paths that would
 -      be considered equivalent to `.git` on an HFS+ filesystem.
 -      Defaults to `true` on Mac OS, and `false` elsewhere.
 -
 -core.protectNTFS::
 -      If set to true, do not allow checkout of paths that would
 -      cause problems with the NTFS filesystem, e.g. conflict with
 -      8.3 "short" names.
 -      Defaults to `true` on Windows, and `false` elsewhere.
 -
 -core.fsmonitor::
 -      If set, the value of this variable is used as a command which
 -      will identify all files that may have changed since the
 -      requested date/time. This information is used to speed up git by
 -      avoiding unnecessary processing of files that have not changed.
 -      See the "fsmonitor-watchman" section of linkgit:githooks[5].
 -
 -core.trustctime::
 -      If false, the ctime differences between the index and the
 -      working tree are ignored; useful when the inode change time
 -      is regularly modified by something outside Git (file system
 -      crawlers and some backup systems).
 -      See linkgit:git-update-index[1]. True by default.
 -
 -core.splitIndex::
 -      If true, the split-index feature of the index will be used.
 -      See linkgit:git-update-index[1]. False by default.
 -
 -core.untrackedCache::
 -      Determines what to do about the untracked cache feature of the
 -      index. It will be kept, if this variable is unset or set to
 -      `keep`. It will automatically be added if set to `true`. And
 -      it will automatically be removed, if set to `false`. Before
 -      setting it to `true`, you should check that mtime is working
 -      properly on your system.
 -      See linkgit:git-update-index[1]. `keep` by default.
 -
 -core.checkStat::
 -      When missing or is set to `default`, many fields in the stat
 -      structure are checked to detect if a file has been modified
 -      since Git looked at it.  When this configuration variable is
 -      set to `minimal`, sub-second part of mtime and ctime, the
 -      uid and gid of the owner of the file, the inode number (and
 -      the device number, if Git was compiled to use it), are
 -      excluded from the check among these fields, leaving only the
 -      whole-second part of mtime (and ctime, if `core.trustCtime`
 -      is set) and the filesize to be checked.
 -+
 -There are implementations of Git that do not leave usable values in
 -some fields (e.g. JGit); by excluding these fields from the
 -comparison, the `minimal` mode may help interoperability when the
 -same repository is used by these other systems at the same time.
 -
 -core.quotePath::
 -      Commands that output paths (e.g. 'ls-files', 'diff'), will
 -      quote "unusual" characters in the pathname by enclosing the
 -      pathname in double-quotes and escaping those characters with
 -      backslashes in the same way C escapes control characters (e.g.
 -      `\t` for TAB, `\n` for LF, `\\` for backslash) or bytes with
 -      values larger than 0x80 (e.g. octal `\302\265` for "micro" in
 -      UTF-8).  If this variable is set to false, bytes higher than
 -      0x80 are not considered "unusual" any more. Double-quotes,
 -      backslash and control characters are always escaped regardless
 -      of the setting of this variable.  A simple space character is
 -      not considered "unusual".  Many commands can output pathnames
 -      completely verbatim using the `-z` option. The default value
 -      is true.
 -
 -core.eol::
 -      Sets the line ending type to use in the working directory for
 -      files that have the `text` property set when core.autocrlf is false.
 -      Alternatives are 'lf', 'crlf' and 'native', which uses the platform's
 -      native line ending.  The default value is `native`.  See
 -      linkgit:gitattributes[5] for more information on end-of-line
 -      conversion.
 -
 -core.safecrlf::
 -      If true, makes Git check if converting `CRLF` is reversible when
 -      end-of-line conversion is active.  Git will verify if a command
 -      modifies a file in the work tree either directly or indirectly.
 -      For example, committing a file followed by checking out the
 -      same file should yield the original file in the work tree.  If
 -      this is not the case for the current setting of
 -      `core.autocrlf`, Git will reject the file.  The variable can
 -      be set to "warn", in which case Git will only warn about an
 -      irreversible conversion but continue the operation.
 -+
 -CRLF conversion bears a slight chance of corrupting data.
 -When it is enabled, Git will convert CRLF to LF during commit and LF to
 -CRLF during checkout.  A file that contains a mixture of LF and
 -CRLF before the commit cannot be recreated by Git.  For text
 -files this is the right thing to do: it corrects line endings
 -such that we have only LF line endings in the repository.
 -But for binary files that are accidentally classified as text the
 -conversion can corrupt data.
 -+
 -If you recognize such corruption early you can easily fix it by
 -setting the conversion type explicitly in .gitattributes.  Right
 -after committing you still have the original file in your work
 -tree and this file is not yet corrupted.  You can explicitly tell
 -Git that this file is binary and Git will handle the file
 -appropriately.
 -+
 -Unfortunately, the desired effect of cleaning up text files with
 -mixed line endings and the undesired effect of corrupting binary
 -files cannot be distinguished.  In both cases CRLFs are removed
 -in an irreversible way.  For text files this is the right thing
 -to do because CRLFs are line endings, while for binary files
 -converting CRLFs corrupts data.
 -+
 -Note, this safety check does not mean that a checkout will generate a
 -file identical to the original file for a different setting of
 -`core.eol` and `core.autocrlf`, but only for the current one.  For
 -example, a text file with `LF` would be accepted with `core.eol=lf`
 -and could later be checked out with `core.eol=crlf`, in which case the
 -resulting file would contain `CRLF`, although the original file
 -contained `LF`.  However, in both work trees the line endings would be
 -consistent, that is either all `LF` or all `CRLF`, but never mixed.  A
 -file with mixed line endings would be reported by the `core.safecrlf`
 -mechanism.
 -
 -core.autocrlf::
 -      Setting this variable to "true" is the same as setting
 -      the `text` attribute to "auto" on all files and core.eol to "crlf".
 -      Set to true if you want to have `CRLF` line endings in your
 -      working directory and the repository has LF line endings.
 -      This variable can be set to 'input',
 -      in which case no output conversion is performed.
 -
 -core.checkRoundtripEncoding::
 -      A comma and/or whitespace separated list of encodings that Git
 -      performs UTF-8 round trip checks on if they are used in an
 -      `working-tree-encoding` attribute (see linkgit:gitattributes[5]).
 -      The default value is `SHIFT-JIS`.
 -
 -core.symlinks::
 -      If false, symbolic links are checked out as small plain files that
 -      contain the link text. linkgit:git-update-index[1] and
 -      linkgit:git-add[1] will not change the recorded type to regular
 -      file. Useful on filesystems like FAT that do not support
 -      symbolic links.
 -+
 -The default is true, except linkgit:git-clone[1] or linkgit:git-init[1]
 -will probe and set core.symlinks false if appropriate when the repository
 -is created.
 -
 -core.gitProxy::
 -      A "proxy command" to execute (as 'command host port') instead
 -      of establishing direct connection to the remote server when
 -      using the Git protocol for fetching. If the variable value is
 -      in the "COMMAND for DOMAIN" format, the command is applied only
 -      on hostnames ending with the specified domain string. This variable
 -      may be set multiple times and is matched in the given order;
 -      the first match wins.
 -+
 -Can be overridden by the `GIT_PROXY_COMMAND` environment variable
 -(which always applies universally, without the special "for"
 -handling).
 -+
 -The special string `none` can be used as the proxy command to
 -specify that no proxy be used for a given domain pattern.
 -This is useful for excluding servers inside a firewall from
 -proxy use, while defaulting to a common proxy for external domains.
 -
 -core.sshCommand::
 -      If this variable is set, `git fetch` and `git push` will
 -      use the specified command instead of `ssh` when they need to
 -      connect to a remote system. The command is in the same form as
 -      the `GIT_SSH_COMMAND` environment variable and is overridden
 -      when the environment variable is set.
 -
 -core.ignoreStat::
 -      If true, Git will avoid using lstat() calls to detect if files have
 -      changed by setting the "assume-unchanged" bit for those tracked files
 -      which it has updated identically in both the index and working tree.
 -+
 -When files are modified outside of Git, the user will need to stage
 -the modified files explicitly (e.g. see 'Examples' section in
 -linkgit:git-update-index[1]).
 -Git will not normally detect changes to those files.
 -+
 -This is useful on systems where lstat() calls are very slow, such as
 -CIFS/Microsoft Windows.
 -+
 -False by default.
 -
 -core.preferSymlinkRefs::
 -      Instead of the default "symref" format for HEAD
 -      and other symbolic reference files, use symbolic links.
 -      This is sometimes needed to work with old scripts that
 -      expect HEAD to be a symbolic link.
 -
 -core.alternateRefsCommand::
 -      When advertising tips of available history from an alternate, use the shell to
 -      execute the specified command instead of linkgit:git-for-each-ref[1]. The
 -      first argument is the absolute path of the alternate. Output must contain one
 -      hex object id per line (i.e., the same as produce by `git for-each-ref
 -      --format='%(objectname)'`).
 -+
 -Note that you cannot generally put `git for-each-ref` directly into the config
 -value, as it does not take a repository path as an argument (but you can wrap
 -the command above in a shell script).
 -
 -core.alternateRefsPrefixes::
 -      When listing references from an alternate, list only references that begin
 -      with the given prefix. Prefixes match as if they were given as arguments to
 -      linkgit:git-for-each-ref[1]. To list multiple prefixes, separate them with
 -      whitespace. If `core.alternateRefsCommand` is set, setting
 -      `core.alternateRefsPrefixes` has no effect.
 -
 -core.bare::
 -      If true this repository is assumed to be 'bare' and has no
 -      working directory associated with it.  If this is the case a
 -      number of commands that require a working directory will be
 -      disabled, such as linkgit:git-add[1] or linkgit:git-merge[1].
 -+
 -This setting is automatically guessed by linkgit:git-clone[1] or
 -linkgit:git-init[1] when the repository was created.  By default a
 -repository that ends in "/.git" is assumed to be not bare (bare =
 -false), while all other repositories are assumed to be bare (bare
 -= true).
 -
 -core.worktree::
 -      Set the path to the root of the working tree.
 -      If `GIT_COMMON_DIR` environment variable is set, core.worktree
 -      is ignored and not used for determining the root of working tree.
 -      This can be overridden by the `GIT_WORK_TREE` environment
 -      variable and the `--work-tree` command-line option.
 -      The value can be an absolute path or relative to the path to
 -      the .git directory, which is either specified by --git-dir
 -      or GIT_DIR, or automatically discovered.
 -      If --git-dir or GIT_DIR is specified but none of
 -      --work-tree, GIT_WORK_TREE and core.worktree is specified,
 -      the current working directory is regarded as the top level
 -      of your working tree.
 -+
 -Note that this variable is honored even when set in a configuration
 -file in a ".git" subdirectory of a directory and its value differs
 -from the latter directory (e.g. "/path/to/.git/config" has
 -core.worktree set to "/different/path"), which is most likely a
 -misconfiguration.  Running Git commands in the "/path/to" directory will
 -still use "/different/path" as the root of the work tree and can cause
 -confusion unless you know what you are doing (e.g. you are creating a
 -read-only snapshot of the same index to a location different from the
 -repository's usual working tree).
 -
 -core.logAllRefUpdates::
 -      Enable the reflog. Updates to a ref <ref> is logged to the file
 -      "`$GIT_DIR/logs/<ref>`", by appending the new and old
 -      SHA-1, the date/time and the reason of the update, but
 -      only when the file exists.  If this configuration
 -      variable is set to `true`, missing "`$GIT_DIR/logs/<ref>`"
 -      file is automatically created for branch heads (i.e. under
 -      `refs/heads/`), remote refs (i.e. under `refs/remotes/`),
 -      note refs (i.e. under `refs/notes/`), and the symbolic ref `HEAD`.
 -      If it is set to `always`, then a missing reflog is automatically
 -      created for any ref under `refs/`.
 -+
 -This information can be used to determine what commit
 -was the tip of a branch "2 days ago".
 -+
 -This value is true by default in a repository that has
 -a working directory associated with it, and false by
 -default in a bare repository.
 -
 -core.repositoryFormatVersion::
 -      Internal variable identifying the repository format and layout
 -      version.
 -
 -core.sharedRepository::
 -      When 'group' (or 'true'), the repository is made shareable between
 -      several users in a group (making sure all the files and objects are
 -      group-writable). When 'all' (or 'world' or 'everybody'), the
 -      repository will be readable by all users, additionally to being
 -      group-shareable. When 'umask' (or 'false'), Git will use permissions
 -      reported by umask(2). When '0xxx', where '0xxx' is an octal number,
 -      files in the repository will have this mode value. '0xxx' will override
 -      user's umask value (whereas the other options will only override
 -      requested parts of the user's umask value). Examples: '0660' will make
 -      the repo read/write-able for the owner and group, but inaccessible to
 -      others (equivalent to 'group' unless umask is e.g. '0022'). '0640' is a
 -      repository that is group-readable but not group-writable.
 -      See linkgit:git-init[1]. False by default.
 -
 -core.warnAmbiguousRefs::
 -      If true, Git will warn you if the ref name you passed it is ambiguous
 -      and might match multiple refs in the repository. True by default.
 -
 -core.compression::
 -      An integer -1..9, indicating a default compression level.
 -      -1 is the zlib default. 0 means no compression,
 -      and 1..9 are various speed/size tradeoffs, 9 being slowest.
 -      If set, this provides a default to other compression variables,
 -      such as `core.looseCompression` and `pack.compression`.
 -
 -core.looseCompression::
 -      An integer -1..9, indicating the compression level for objects that
 -      are not in a pack file. -1 is the zlib default. 0 means no
 -      compression, and 1..9 are various speed/size tradeoffs, 9 being
 -      slowest.  If not set,  defaults to core.compression.  If that is
 -      not set,  defaults to 1 (best speed).
 -
 -core.packedGitWindowSize::
 -      Number of bytes of a pack file to map into memory in a
 -      single mapping operation.  Larger window sizes may allow
 -      your system to process a smaller number of large pack files
 -      more quickly.  Smaller window sizes will negatively affect
 -      performance due to increased calls to the operating system's
 -      memory manager, but may improve performance when accessing
 -      a large number of large pack files.
 -+
 -Default is 1 MiB if NO_MMAP was set at compile time, otherwise 32
 -MiB on 32 bit platforms and 1 GiB on 64 bit platforms.  This should
 -be reasonable for all users/operating systems.  You probably do
 -not need to adjust this value.
 -+
 -Common unit suffixes of 'k', 'm', or 'g' are supported.
+ extensions.worktreeConfig::
+       If set, by default "git config" reads from both "config" and
+       "config.worktree" file from GIT_DIR in that order. In
+       multiple working directory mode, "config" file is shared while
+       "config.worktree" is per-working directory (i.e., it's in
+       GIT_COMMON_DIR/worktrees/<id>/config.worktree)
 +include::config/add.txt[]
  
 -core.packedGitLimit::
 -      Maximum number of bytes to map simultaneously into memory
 -      from pack files.  If Git needs to access more than this many
 -      bytes at once to complete an operation it will unmap existing
 -      regions to reclaim virtual address space within the process.
 -+
 -Default is 256 MiB on 32 bit platforms and 32 TiB (effectively
 -unlimited) on 64 bit platforms.
 -This should be reasonable for all users/operating systems, except on
 -the largest projects.  You probably do not need to adjust this value.
 -+
 -Common unit suffixes of 'k', 'm', or 'g' are supported.
 -
 -core.deltaBaseCacheLimit::
 -      Maximum number of bytes to reserve for caching base objects
 -      that may be referenced by multiple deltified objects.  By storing the
 -      entire decompressed base objects in a cache Git is able
 -      to avoid unpacking and decompressing frequently used base
 -      objects multiple times.
 -+
 -Default is 96 MiB on all platforms.  This should be reasonable
 -for all users/operating systems, except on the largest projects.
 -You probably do not need to adjust this value.
 -+
 -Common unit suffixes of 'k', 'm', or 'g' are supported.
 -
 -core.bigFileThreshold::
 -      Files larger than this size are stored deflated, without
 -      attempting delta compression.  Storing large files without
 -      delta compression avoids excessive memory usage, at the
 -      slight expense of increased disk usage. Additionally files
 -      larger than this size are always treated as binary.
 -+
 -Default is 512 MiB on all platforms.  This should be reasonable
 -for most projects as source code and other text files can still
 -be delta compressed, but larger binary media files won't be.
 -+
 -Common unit suffixes of 'k', 'm', or 'g' are supported.
 -
 -core.excludesFile::
 -      Specifies the pathname to the file that contains patterns to
 -      describe paths that are not meant to be tracked, in addition
 -      to '.gitignore' (per-directory) and '.git/info/exclude'.
 -      Defaults to `$XDG_CONFIG_HOME/git/ignore`.
 -      If `$XDG_CONFIG_HOME` is either not set or empty, `$HOME/.config/git/ignore`
 -      is used instead. See linkgit:gitignore[5].
 -
 -core.askPass::
 -      Some commands (e.g. svn and http interfaces) that interactively
 -      ask for a password can be told to use an external program given
 -      via the value of this variable. Can be overridden by the `GIT_ASKPASS`
 -      environment variable. If not set, fall back to the value of the
 -      `SSH_ASKPASS` environment variable or, failing that, a simple password
 -      prompt. The external program shall be given a suitable prompt as
 -      command-line argument and write the password on its STDOUT.
 -
 -core.attributesFile::
 -      In addition to '.gitattributes' (per-directory) and
 -      '.git/info/attributes', Git looks into this file for attributes
 -      (see linkgit:gitattributes[5]). Path expansions are made the same
 -      way as for `core.excludesFile`. Its default value is
 -      `$XDG_CONFIG_HOME/git/attributes`. If `$XDG_CONFIG_HOME` is either not
 -      set or empty, `$HOME/.config/git/attributes` is used instead.
 -
 -core.hooksPath::
 -      By default Git will look for your hooks in the
 -      '$GIT_DIR/hooks' directory. Set this to different path,
 -      e.g. '/etc/git/hooks', and Git will try to find your hooks in
 -      that directory, e.g. '/etc/git/hooks/pre-receive' instead of
 -      in '$GIT_DIR/hooks/pre-receive'.
 -+
 -The path can be either absolute or relative. A relative path is
 -taken as relative to the directory where the hooks are run (see
 -the "DESCRIPTION" section of linkgit:githooks[5]).
 -+
 -This configuration variable is useful in cases where you'd like to
 -centrally configure your Git hooks instead of configuring them on a
 -per-repository basis, or as a more flexible and centralized
 -alternative to having an `init.templateDir` where you've changed
 -default hooks.
 -
 -core.editor::
 -      Commands such as `commit` and `tag` that let you edit
 -      messages by launching an editor use the value of this
 -      variable when it is set, and the environment variable
 -      `GIT_EDITOR` is not set.  See linkgit:git-var[1].
 -
 -core.commentChar::
 -      Commands such as `commit` and `tag` that let you edit
 -      messages consider a line that begins with this character
 -      commented, and removes them after the editor returns
 -      (default '#').
 -+
 -If set to "auto", `git-commit` would select a character that is not
 -the beginning character of any line in existing commit messages.
 -
 -core.filesRefLockTimeout::
 -      The length of time, in milliseconds, to retry when trying to
 -      lock an individual reference. Value 0 means not to retry at
 -      all; -1 means to try indefinitely. Default is 100 (i.e.,
 -      retry for 100ms).
 -
 -core.packedRefsTimeout::
 -      The length of time, in milliseconds, to retry when trying to
 -      lock the `packed-refs` file. Value 0 means not to retry at
 -      all; -1 means to try indefinitely. Default is 1000 (i.e.,
 -      retry for 1 second).
 -
 -core.pager::
 -      Text viewer for use by Git commands (e.g., 'less').  The value
 -      is meant to be interpreted by the shell.  The order of preference
 -      is the `$GIT_PAGER` environment variable, then `core.pager`
 -      configuration, then `$PAGER`, and then the default chosen at
 -      compile time (usually 'less').
 -+
 -When the `LESS` environment variable is unset, Git sets it to `FRX`
 -(if `LESS` environment variable is set, Git does not change it at
 -all).  If you want to selectively override Git's default setting
 -for `LESS`, you can set `core.pager` to e.g. `less -S`.  This will
 -be passed to the shell by Git, which will translate the final
 -command to `LESS=FRX less -S`. The environment does not set the
 -`S` option but the command line does, instructing less to truncate
 -long lines. Similarly, setting `core.pager` to `less -+F` will
 -deactivate the `F` option specified by the environment from the
 -command-line, deactivating the "quit if one screen" behavior of
 -`less`.  One can specifically activate some flags for particular
 -commands: for example, setting `pager.blame` to `less -S` enables
 -line truncation only for `git blame`.
 -+
 -Likewise, when the `LV` environment variable is unset, Git sets it
 -to `-c`.  You can override this setting by exporting `LV` with
 -another value or setting `core.pager` to `lv +c`.
 -
 -core.whitespace::
 -      A comma separated list of common whitespace problems to
 -      notice.  'git diff' will use `color.diff.whitespace` to
 -      highlight them, and 'git apply --whitespace=error' will
 -      consider them as errors.  You can prefix `-` to disable
 -      any of them (e.g. `-trailing-space`):
 -+
 -* `blank-at-eol` treats trailing whitespaces at the end of the line
 -  as an error (enabled by default).
 -* `space-before-tab` treats a space character that appears immediately
 -  before a tab character in the initial indent part of the line as an
 -  error (enabled by default).
 -* `indent-with-non-tab` treats a line that is indented with space
 -  characters instead of the equivalent tabs as an error (not enabled by
 -  default).
 -* `tab-in-indent` treats a tab character in the initial indent part of
 -  the line as an error (not enabled by default).
 -* `blank-at-eof` treats blank lines added at the end of file as an error
 -  (enabled by default).
 -* `trailing-space` is a short-hand to cover both `blank-at-eol` and
 -  `blank-at-eof`.
 -* `cr-at-eol` treats a carriage-return at the end of line as
 -  part of the line terminator, i.e. with it, `trailing-space`
 -  does not trigger if the character before such a carriage-return
 -  is not a whitespace (not enabled by default).
 -* `tabwidth=<n>` tells how many character positions a tab occupies; this
 -  is relevant for `indent-with-non-tab` and when Git fixes `tab-in-indent`
 -  errors. The default tab width is 8. Allowed values are 1 to 63.
 -
 -core.fsyncObjectFiles::
 -      This boolean will enable 'fsync()' when writing object files.
 -+
 -This is a total waste of time and effort on a filesystem that orders
 -data writes properly, but can be useful for filesystems that do not use
 -journalling (traditional UNIX filesystems) or that only journal metadata
 -and not file contents (OS X's HFS+, or Linux ext3 with "data=writeback").
 +include::config/alias.txt[]
  
 -core.preloadIndex::
 -      Enable parallel index preload for operations like 'git diff'
 -+
 -This can speed up operations like 'git diff' and 'git status' especially
 -on filesystems like NFS that have weak caching semantics and thus
 -relatively high IO latencies.  When enabled, Git will do the
 -index comparison to the filesystem data in parallel, allowing
 -overlapping IO's.  Defaults to true.
 -
 -core.createObject::
 -      You can set this to 'link', in which case a hardlink followed by
 -      a delete of the source are used to make sure that object creation
 -      will not overwrite existing objects.
 -+
 -On some file system/operating system combinations, this is unreliable.
 -Set this config setting to 'rename' there; However, This will remove the
 -check that makes sure that existing object files will not get overwritten.
 -
 -core.notesRef::
 -      When showing commit messages, also show notes which are stored in
 -      the given ref.  The ref must be fully qualified.  If the given
 -      ref does not exist, it is not an error but means that no
 -      notes should be printed.
 -+
 -This setting defaults to "refs/notes/commits", and it can be overridden by
 -the `GIT_NOTES_REF` environment variable.  See linkgit:git-notes[1].
 -
 -core.commitGraph::
 -      If true, then git will read the commit-graph file (if it exists)
 -      to parse the graph structure of commits. Defaults to false. See
 -      linkgit:git-commit-graph[1] for more information.
 -
 -core.useReplaceRefs::
 -      If set to `false`, behave as if the `--no-replace-objects`
 -      option was given on the command line. See linkgit:git[1] and
 -      linkgit:git-replace[1] for more information.
 -
 -core.multiPackIndex::
 -      Use the multi-pack-index file to track multiple packfiles using a
 -      single index. See link:technical/multi-pack-index.html[the
 -      multi-pack-index design document].
 -
 -core.sparseCheckout::
 -      Enable "sparse checkout" feature. See section "Sparse checkout" in
 -      linkgit:git-read-tree[1] for more information.
 -
 -core.abbrev::
 -      Set the length object names are abbreviated to.  If
 -      unspecified or set to "auto", an appropriate value is
 -      computed based on the approximate number of packed objects
 -      in your repository, which hopefully is enough for
 -      abbreviated object names to stay unique for some time.
 -      The minimum length is 4.
 -
 -add.ignoreErrors::
 -add.ignore-errors (deprecated)::
 -      Tells 'git add' to continue adding files when some files cannot be
 -      added due to indexing errors. Equivalent to the `--ignore-errors`
 -      option of linkgit:git-add[1].  `add.ignore-errors` is deprecated,
 -      as it does not follow the usual naming convention for configuration
 -      variables.
 -
 -alias.*::
 -      Command aliases for the linkgit:git[1] command wrapper - e.g.
 -      after defining "alias.last = cat-file commit HEAD", the invocation
 -      "git last" is equivalent to "git cat-file commit HEAD". To avoid
 -      confusion and troubles with script usage, aliases that
 -      hide existing Git commands are ignored. Arguments are split by
 -      spaces, the usual shell quoting and escaping is supported.
 -      A quote pair or a backslash can be used to quote them.
 -+
 -If the alias expansion is prefixed with an exclamation point,
 -it will be treated as a shell command.  For example, defining
 -"alias.new = !gitk --all --not ORIG_HEAD", the invocation
 -"git new" is equivalent to running the shell command
 -"gitk --all --not ORIG_HEAD".  Note that shell commands will be
 -executed from the top-level directory of a repository, which may
 -not necessarily be the current directory.
 -`GIT_PREFIX` is set as returned by running 'git rev-parse --show-prefix'
 -from the original current directory. See linkgit:git-rev-parse[1].
 -
 -am.keepcr::
 -      If true, git-am will call git-mailsplit for patches in mbox format
 -      with parameter `--keep-cr`. In this case git-mailsplit will
 -      not remove `\r` from lines ending with `\r\n`. Can be overridden
 -      by giving `--no-keep-cr` from the command line.
 -      See linkgit:git-am[1], linkgit:git-mailsplit[1].
 -
 -am.threeWay::
 -      By default, `git am` will fail if the patch does not apply cleanly. When
 -      set to true, this setting tells `git am` to fall back on 3-way merge if
 -      the patch records the identity of blobs it is supposed to apply to and
 -      we have those blobs available locally (equivalent to giving the `--3way`
 -      option from the command line). Defaults to `false`.
 -      See linkgit:git-am[1].
 -
 -apply.ignoreWhitespace::
 -      When set to 'change', tells 'git apply' to ignore changes in
 -      whitespace, in the same way as the `--ignore-space-change`
 -      option.
 -      When set to one of: no, none, never, false tells 'git apply' to
 -      respect all whitespace differences.
 -      See linkgit:git-apply[1].
 -
 -apply.whitespace::
 -      Tells 'git apply' how to handle whitespaces, in the same way
 -      as the `--whitespace` option. See linkgit:git-apply[1].
 -
 -blame.blankBoundary::
 -      Show blank commit object name for boundary commits in
 -      linkgit:git-blame[1]. This option defaults to false.
 -
 -blame.coloring::
 -      This determines the coloring scheme to be applied to blame
 -      output. It can be 'repeatedLines', 'highlightRecent',
 -      or 'none' which is the default.
 -
 -blame.date::
 -      Specifies the format used to output dates in linkgit:git-blame[1].
 -      If unset the iso format is used. For supported values,
 -      see the discussion of the `--date` option at linkgit:git-log[1].
 -
 -blame.showEmail::
 -      Show the author email instead of author name in linkgit:git-blame[1].
 -      This option defaults to false.
 -
 -blame.showRoot::
 -      Do not treat root commits as boundaries in linkgit:git-blame[1].
 -      This option defaults to false.
 -
 -branch.autoSetupMerge::
 -      Tells 'git branch' and 'git checkout' to set up new branches
 -      so that linkgit:git-pull[1] will appropriately merge from the
 -      starting point branch. Note that even if this option is not set,
 -      this behavior can be chosen per-branch using the `--track`
 -      and `--no-track` options. The valid settings are: `false` -- no
 -      automatic setup is done; `true` -- automatic setup is done when the
 -      starting point is a remote-tracking branch; `always` --
 -      automatic setup is done when the starting point is either a
 -      local branch or remote-tracking
 -      branch. This option defaults to true.
 -
 -branch.autoSetupRebase::
 -      When a new branch is created with 'git branch' or 'git checkout'
 -      that tracks another branch, this variable tells Git to set
 -      up pull to rebase instead of merge (see "branch.<name>.rebase").
 -      When `never`, rebase is never automatically set to true.
 -      When `local`, rebase is set to true for tracked branches of
 -      other local branches.
 -      When `remote`, rebase is set to true for tracked branches of
 -      remote-tracking branches.
 -      When `always`, rebase will be set to true for all tracking
 -      branches.
 -      See "branch.autoSetupMerge" for details on how to set up a
 -      branch to track another branch.
 -      This option defaults to never.
 -
 -branch.sort::
 -      This variable controls the sort ordering of branches when displayed by
 -      linkgit:git-branch[1]. Without the "--sort=<value>" option provided, the
 -      value of this variable will be used as the default.
 -      See linkgit:git-for-each-ref[1] field names for valid values.
 -
 -branch.<name>.remote::
 -      When on branch <name>, it tells 'git fetch' and 'git push'
 -      which remote to fetch from/push to.  The remote to push to
 -      may be overridden with `remote.pushDefault` (for all branches).
 -      The remote to push to, for the current branch, may be further
 -      overridden by `branch.<name>.pushRemote`.  If no remote is
 -      configured, or if you are not on any branch, it defaults to
 -      `origin` for fetching and `remote.pushDefault` for pushing.
 -      Additionally, `.` (a period) is the current local repository
 -      (a dot-repository), see `branch.<name>.merge`'s final note below.
 -
 -branch.<name>.pushRemote::
 -      When on branch <name>, it overrides `branch.<name>.remote` for
 -      pushing.  It also overrides `remote.pushDefault` for pushing
 -      from branch <name>.  When you pull from one place (e.g. your
 -      upstream) and push to another place (e.g. your own publishing
 -      repository), you would want to set `remote.pushDefault` to
 -      specify the remote to push to for all branches, and use this
 -      option to override it for a specific branch.
 -
 -branch.<name>.merge::
 -      Defines, together with branch.<name>.remote, the upstream branch
 -      for the given branch. It tells 'git fetch'/'git pull'/'git rebase' which
 -      branch to merge and can also affect 'git push' (see push.default).
 -      When in branch <name>, it tells 'git fetch' the default
 -      refspec to be marked for merging in FETCH_HEAD. The value is
 -      handled like the remote part of a refspec, and must match a
 -      ref which is fetched from the remote given by
 -      "branch.<name>.remote".
 -      The merge information is used by 'git pull' (which at first calls
 -      'git fetch') to lookup the default branch for merging. Without
 -      this option, 'git pull' defaults to merge the first refspec fetched.
 -      Specify multiple values to get an octopus merge.
 -      If you wish to setup 'git pull' so that it merges into <name> from
 -      another branch in the local repository, you can point
 -      branch.<name>.merge to the desired branch, and use the relative path
 -      setting `.` (a period) for branch.<name>.remote.
 -
 -branch.<name>.mergeOptions::
 -      Sets default options for merging into branch <name>. The syntax and
 -      supported options are the same as those of linkgit:git-merge[1], but
 -      option values containing whitespace characters are currently not
 -      supported.
 -
 -branch.<name>.rebase::
 -      When true, rebase the branch <name> on top of the fetched branch,
 -      instead of merging the default branch from the default remote when
 -      "git pull" is run. See "pull.rebase" for doing this in a non
 -      branch-specific manner.
 -+
 -When `merges`, pass the `--rebase-merges` option to 'git rebase'
 -so that the local merge commits are included in the rebase (see
 -linkgit:git-rebase[1] for details).
 -+
 -When preserve, also pass `--preserve-merges` along to 'git rebase'
 -so that locally committed merge commits will not be flattened
 -by running 'git pull'.
 -+
 -When the value is `interactive`, the rebase is run in interactive mode.
 -+
 -*NOTE*: this is a possibly dangerous operation; do *not* use
 -it unless you understand the implications (see linkgit:git-rebase[1]
 -for details).
 -
 -branch.<name>.description::
 -      Branch description, can be edited with
 -      `git branch --edit-description`. Branch description is
 -      automatically added in the format-patch cover letter or
 -      request-pull summary.
 -
 -browser.<tool>.cmd::
 -      Specify the command to invoke the specified browser. The
 -      specified command is evaluated in shell with the URLs passed
 -      as arguments. (See linkgit:git-web{litdd}browse[1].)
 -
 -browser.<tool>.path::
 -      Override the path for the given tool that may be used to
 -      browse HTML help (see `-w` option in linkgit:git-help[1]) or a
 -      working repository in gitweb (see linkgit:git-instaweb[1]).
 -
 -checkout.defaultRemote::
 -      When you run 'git checkout <something>' and only have one
 -      remote, it may implicitly fall back on checking out and
 -      tracking e.g. 'origin/<something>'. This stops working as soon
 -      as you have more than one remote with a '<something>'
 -      reference. This setting allows for setting the name of a
 -      preferred remote that should always win when it comes to
 -      disambiguation. The typical use-case is to set this to
 -      `origin`.
 -+
 -Currently this is used by linkgit:git-checkout[1] when 'git checkout
 -<something>' will checkout the '<something>' branch on another remote,
 -and by linkgit:git-worktree[1] when 'git worktree add' refers to a
 -remote branch. This setting might be used for other checkout-like
 -commands or functionality in the future.
 -
 -checkout.optimizeNewBranch::
 -      Optimizes the performance of "git checkout -b <new_branch>" when
 -      using sparse-checkout.  When set to true, git will not update the
 -      repo based on the current sparse-checkout settings.  This means it
 -      will not update the skip-worktree bit in the index nor add/remove
 -      files in the working directory to reflect the current sparse checkout
 -      settings nor will it show the local changes.
 -
 -clean.requireForce::
 -      A boolean to make git-clean do nothing unless given -f,
 -      -i or -n.   Defaults to true.
 -
 -color.advice::
 -      A boolean to enable/disable color in hints (e.g. when a push
 -      failed, see `advice.*` for a list).  May be set to `always`,
 -      `false` (or `never`) or `auto` (or `true`), in which case colors
 -      are used only when the error output goes to a terminal. If
 -      unset, then the value of `color.ui` is used (`auto` by default).
 -
 -color.advice.hint::
 -      Use customized color for hints.
 -
 -color.blame.highlightRecent::
 -      This can be used to color the metadata of a blame line depending
 -      on age of the line.
 -+
 -This setting should be set to a comma-separated list of color and date settings,
 -starting and ending with a color, the dates should be set from oldest to newest.
 -The metadata will be colored given the colors if the the line was introduced
 -before the given timestamp, overwriting older timestamped colors.
 -+
 -Instead of an absolute timestamp relative timestamps work as well, e.g.
 -2.weeks.ago is valid to address anything older than 2 weeks.
 -+
 -It defaults to 'blue,12 month ago,white,1 month ago,red', which colors
 -everything older than one year blue, recent changes between one month and
 -one year old are kept white, and lines introduced within the last month are
 -colored red.
 -
 -color.blame.repeatedLines::
 -      Use the customized color for the part of git-blame output that
 -      is repeated meta information per line (such as commit id,
 -      author name, date and timezone). Defaults to cyan.
 -
 -color.branch::
 -      A boolean to enable/disable color in the output of
 -      linkgit:git-branch[1]. May be set to `always`,
 -      `false` (or `never`) or `auto` (or `true`), in which case colors are used
 -      only when the output is to a terminal. If unset, then the
 -      value of `color.ui` is used (`auto` by default).
 -
 -color.branch.<slot>::
 -      Use customized color for branch coloration. `<slot>` is one of
 -      `current` (the current branch), `local` (a local branch),
 -      `remote` (a remote-tracking branch in refs/remotes/),
 -      `upstream` (upstream tracking branch), `plain` (other
 -      refs).
 -
 -color.diff::
 -      Whether to use ANSI escape sequences to add color to patches.
 -      If this is set to `always`, linkgit:git-diff[1],
 -      linkgit:git-log[1], and linkgit:git-show[1] will use color
 -      for all patches.  If it is set to `true` or `auto`, those
 -      commands will only use color when output is to the terminal.
 -      If unset, then the value of `color.ui` is used (`auto` by
 -      default).
 -+
 -This does not affect linkgit:git-format-patch[1] or the
 -'git-diff-{asterisk}' plumbing commands.  Can be overridden on the
 -command line with the `--color[=<when>]` option.
 -
 -color.diff.<slot>::
 -      Use customized color for diff colorization.  `<slot>` specifies
 -      which part of the patch to use the specified color, and is one
 -      of `context` (context text - `plain` is a historical synonym),
 -      `meta` (metainformation), `frag`
 -      (hunk header), 'func' (function in hunk header), `old` (removed lines),
 -      `new` (added lines), `commit` (commit headers), `whitespace`
 -      (highlighting whitespace errors), `oldMoved` (deleted lines),
 -      `newMoved` (added lines), `oldMovedDimmed`, `oldMovedAlternative`,
 -      `oldMovedAlternativeDimmed`, `newMovedDimmed`, `newMovedAlternative`
 -      `newMovedAlternativeDimmed` (See the '<mode>'
 -      setting of '--color-moved' in linkgit:git-diff[1] for details),
 -      `contextDimmed`, `oldDimmed`, `newDimmed`, `contextBold`,
 -      `oldBold`, and `newBold` (see linkgit:git-range-diff[1] for details).
 -
 -color.decorate.<slot>::
 -      Use customized color for 'git log --decorate' output.  `<slot>` is one
 -      of `branch`, `remoteBranch`, `tag`, `stash` or `HEAD` for local
 -      branches, remote-tracking branches, tags, stash and HEAD, respectively
 -      and `grafted` for grafted commits.
 -
 -color.grep::
 -      When set to `always`, always highlight matches.  When `false` (or
 -      `never`), never.  When set to `true` or `auto`, use color only
 -      when the output is written to the terminal.  If unset, then the
 -      value of `color.ui` is used (`auto` by default).
 -
 -color.grep.<slot>::
 -      Use customized color for grep colorization.  `<slot>` specifies which
 -      part of the line to use the specified color, and is one of
 -+
 ---
 -`context`;;
 -      non-matching text in context lines (when using `-A`, `-B`, or `-C`)
 -`filename`;;
 -      filename prefix (when not using `-h`)
 -`function`;;
 -      function name lines (when using `-p`)
 -`lineNumber`;;
 -      line number prefix (when using `-n`)
 -`column`;;
 -      column number prefix (when using `--column`)
 -`match`;;
 -      matching text (same as setting `matchContext` and `matchSelected`)
 -`matchContext`;;
 -      matching text in context lines
 -`matchSelected`;;
 -      matching text in selected lines
 -`selected`;;
 -      non-matching text in selected lines
 -`separator`;;
 -      separators between fields on a line (`:`, `-`, and `=`)
 -      and between hunks (`--`)
 ---
 -
 -color.interactive::
 -      When set to `always`, always use colors for interactive prompts
 -      and displays (such as those used by "git-add --interactive" and
 -      "git-clean --interactive"). When false (or `never`), never.
 -      When set to `true` or `auto`, use colors only when the output is
 -      to the terminal. If unset, then the value of `color.ui` is
 -      used (`auto` by default).
 -
 -color.interactive.<slot>::
 -      Use customized color for 'git add --interactive' and 'git clean
 -      --interactive' output. `<slot>` may be `prompt`, `header`, `help`
 -      or `error`, for four distinct types of normal output from
 -      interactive commands.
 -
 -color.pager::
 -      A boolean to enable/disable colored output when the pager is in
 -      use (default is true).
 -
 -color.push::
 -      A boolean to enable/disable color in push errors. May be set to
 -      `always`, `false` (or `never`) or `auto` (or `true`), in which
 -      case colors are used only when the error output goes to a terminal.
 -      If unset, then the value of `color.ui` is used (`auto` by default).
 -
 -color.push.error::
 -      Use customized color for push errors.
 -
 -color.remote::
 -      If set, keywords at the start of the line are highlighted. The
 -      keywords are "error", "warning", "hint" and "success", and are
 -      matched case-insensitively. May be set to `always`, `false` (or
 -      `never`) or `auto` (or `true`). If unset, then the value of
 -      `color.ui` is used (`auto` by default).
 -
 -color.remote.<slot>::
 -      Use customized color for each remote keyword. `<slot>` may be
 -      `hint`, `warning`, `success` or `error` which match the
 -      corresponding keyword.
 -
 -color.showBranch::
 -      A boolean to enable/disable color in the output of
 -      linkgit:git-show-branch[1]. May be set to `always`,
 -      `false` (or `never`) or `auto` (or `true`), in which case colors are used
 -      only when the output is to a terminal. If unset, then the
 -      value of `color.ui` is used (`auto` by default).
 -
 -color.status::
 -      A boolean to enable/disable color in the output of
 -      linkgit:git-status[1]. May be set to `always`,
 -      `false` (or `never`) or `auto` (or `true`), in which case colors are used
 -      only when the output is to a terminal. If unset, then the
 -      value of `color.ui` is used (`auto` by default).
 -
 -color.status.<slot>::
 -      Use customized color for status colorization. `<slot>` is
 -      one of `header` (the header text of the status message),
 -      `added` or `updated` (files which are added but not committed),
 -      `changed` (files which are changed but not added in the index),
 -      `untracked` (files which are not tracked by Git),
 -      `branch` (the current branch),
 -      `nobranch` (the color the 'no branch' warning is shown in, defaulting
 -      to red),
 -      `localBranch` or `remoteBranch` (the local and remote branch names,
 -      respectively, when branch and tracking information is displayed in the
 -      status short-format), or
 -      `unmerged` (files which have unmerged changes).
 -
 -color.transport::
 -      A boolean to enable/disable color when pushes are rejected. May be
 -      set to `always`, `false` (or `never`) or `auto` (or `true`), in which
 -      case colors are used only when the error output goes to a terminal.
 -      If unset, then the value of `color.ui` is used (`auto` by default).
 -
 -color.transport.rejected::
 -      Use customized color when a push was rejected.
 -
 -color.ui::
 -      This variable determines the default value for variables such
 -      as `color.diff` and `color.grep` that control the use of color
 -      per command family. Its scope will expand as more commands learn
 -      configuration to set a default for the `--color` option.  Set it
 -      to `false` or `never` if you prefer Git commands not to use
 -      color unless enabled explicitly with some other configuration
 -      or the `--color` option. Set it to `always` if you want all
 -      output not intended for machine consumption to use color, to
 -      `true` or `auto` (this is the default since Git 1.8.4) if you
 -      want such output to use color when written to the terminal.
 -
 -column.ui::
 -      Specify whether supported commands should output in columns.
 -      This variable consists of a list of tokens separated by spaces
 -      or commas:
 -+
 -These options control when the feature should be enabled
 -(defaults to 'never'):
 -+
 ---
 -`always`;;
 -      always show in columns
 -`never`;;
 -      never show in columns
 -`auto`;;
 -      show in columns if the output is to the terminal
 ---
 -+
 -These options control layout (defaults to 'column').  Setting any
 -of these implies 'always' if none of 'always', 'never', or 'auto' are
 -specified.
 -+
 ---
 -`column`;;
 -      fill columns before rows
 -`row`;;
 -      fill rows before columns
 -`plain`;;
 -      show in one column
 ---
 -+
 -Finally, these options can be combined with a layout option (defaults
 -to 'nodense'):
 -+
 ---
 -`dense`;;
 -      make unequal size columns to utilize more space
 -`nodense`;;
 -      make equal size columns
 ---
 -
 -column.branch::
 -      Specify whether to output branch listing in `git branch` in columns.
 -      See `column.ui` for details.
 -
 -column.clean::
 -      Specify the layout when list items in `git clean -i`, which always
 -      shows files and directories in columns. See `column.ui` for details.
 -
 -column.status::
 -      Specify whether to output untracked files in `git status` in columns.
 -      See `column.ui` for details.
 -
 -column.tag::
 -      Specify whether to output tag listing in `git tag` in columns.
 -      See `column.ui` for details.
 -
 -commit.cleanup::
 -      This setting overrides the default of the `--cleanup` option in
 -      `git commit`. See linkgit:git-commit[1] for details. Changing the
 -      default can be useful when you always want to keep lines that begin
 -      with comment character `#` in your log message, in which case you
 -      would do `git config commit.cleanup whitespace` (note that you will
 -      have to remove the help lines that begin with `#` in the commit log
 -      template yourself, if you do this).
 -
 -commit.gpgSign::
 -
 -      A boolean to specify whether all commits should be GPG signed.
 -      Use of this option when doing operations such as rebase can
 -      result in a large number of commits being signed. It may be
 -      convenient to use an agent to avoid typing your GPG passphrase
 -      several times.
 -
 -commit.status::
 -      A boolean to enable/disable inclusion of status information in the
 -      commit message template when using an editor to prepare the commit
 -      message.  Defaults to true.
 -
 -commit.template::
 -      Specify the pathname of a file to use as the template for
 -      new commit messages.
 -
 -commit.verbose::
 -      A boolean or int to specify the level of verbose with `git commit`.
 -      See linkgit:git-commit[1].
 -
 -credential.helper::
 -      Specify an external helper to be called when a username or
 -      password credential is needed; the helper may consult external
 -      storage to avoid prompting the user for the credentials. Note
 -      that multiple helpers may be defined. See linkgit:gitcredentials[7]
 -      for details.
 -
 -credential.useHttpPath::
 -      When acquiring credentials, consider the "path" component of an http
 -      or https URL to be important. Defaults to false. See
 -      linkgit:gitcredentials[7] for more information.
 -
 -credential.username::
 -      If no username is set for a network authentication, use this username
 -      by default. See credential.<context>.* below, and
 -      linkgit:gitcredentials[7].
 -
 -credential.<url>.*::
 -      Any of the credential.* options above can be applied selectively to
 -      some credentials. For example "credential.https://example.com.username"
 -      would set the default username only for https connections to
 -      example.com. See linkgit:gitcredentials[7] for details on how URLs are
 -      matched.
 -
 -credentialCache.ignoreSIGHUP::
 -      Tell git-credential-cache--daemon to ignore SIGHUP, instead of quitting.
 -
 -completion.commands::
 -      This is only used by git-completion.bash to add or remove
 -      commands from the list of completed commands. Normally only
 -      porcelain commands and a few select others are completed. You
 -      can add more commands, separated by space, in this
 -      variable. Prefixing the command with '-' will remove it from
 -      the existing list.
 -
 -include::diff-config.txt[]
 -
 -difftool.<tool>.path::
 -      Override the path for the given tool.  This is useful in case
 -      your tool is not in the PATH.
 -
 -difftool.<tool>.cmd::
 -      Specify the command to invoke the specified diff tool.
 -      The specified command is evaluated in shell with the following
 -      variables available:  'LOCAL' is set to the name of the temporary
 -      file containing the contents of the diff pre-image and 'REMOTE'
 -      is set to the name of the temporary file containing the contents
 -      of the diff post-image.
 -
 -difftool.prompt::
 -      Prompt before each invocation of the diff tool.
 -
 -fastimport.unpackLimit::
 -      If the number of objects imported by linkgit:git-fast-import[1]
 -      is below this limit, then the objects will be unpacked into
 -      loose object files.  However if the number of imported objects
 -      equals or exceeds this limit then the pack will be stored as a
 -      pack.  Storing the pack from a fast-import can make the import
 -      operation complete faster, especially on slow filesystems.  If
 -      not set, the value of `transfer.unpackLimit` is used instead.
 -
 -include::fetch-config.txt[]
 -
 -include::format-config.txt[]
 -
 -filter.<driver>.clean::
 -      The command which is used to convert the content of a worktree
 -      file to a blob upon checkin.  See linkgit:gitattributes[5] for
 -      details.
 -
 -filter.<driver>.smudge::
 -      The command which is used to convert the content of a blob
 -      object to a worktree file upon checkout.  See
 -      linkgit:gitattributes[5] for details.
 -
 -fsck.<msg-id>::
 -      During fsck git may find issues with legacy data which
 -      wouldn't be generated by current versions of git, and which
 -      wouldn't be sent over the wire if `transfer.fsckObjects` was
 -      set. This feature is intended to support working with legacy
 -      repositories containing such data.
 -+
 -Setting `fsck.<msg-id>` will be picked up by linkgit:git-fsck[1], but
 -to accept pushes of such data set `receive.fsck.<msg-id>` instead, or
 -to clone or fetch it set `fetch.fsck.<msg-id>`.
 -+
 -The rest of the documentation discusses `fsck.*` for brevity, but the
 -same applies for the corresponding `receive.fsck.*` and
 -`fetch.<msg-id>.*`. variables.
 -+
 -Unlike variables like `color.ui` and `core.editor` the
 -`receive.fsck.<msg-id>` and `fetch.fsck.<msg-id>` variables will not
 -fall back on the `fsck.<msg-id>` configuration if they aren't set. To
 -uniformly configure the same fsck settings in different circumstances
 -all three of them they must all set to the same values.
 -+
 -When `fsck.<msg-id>` is set, errors can be switched to warnings and
 -vice versa by configuring the `fsck.<msg-id>` setting where the
 -`<msg-id>` is the fsck message ID and the value is one of `error`,
 -`warn` or `ignore`. For convenience, fsck prefixes the error/warning
 -with the message ID, e.g. "missingEmail: invalid author/committer line
 -- missing email" means that setting `fsck.missingEmail = ignore` will
 -hide that issue.
 -+
 -In general, it is better to enumerate existing objects with problems
 -with `fsck.skipList`, instead of listing the kind of breakages these
 -problematic objects share to be ignored, as doing the latter will
 -allow new instances of the same breakages go unnoticed.
 -+
 -Setting an unknown `fsck.<msg-id>` value will cause fsck to die, but
 -doing the same for `receive.fsck.<msg-id>` and `fetch.fsck.<msg-id>`
 -will only cause git to warn.
 -
 -fsck.skipList::
 -      The path to a list of object names (i.e. one unabbreviated SHA-1 per
 -      line) that are known to be broken in a non-fatal way and should
 -      be ignored. On versions of Git 2.20 and later comments ('#'), empty
 -      lines, and any leading and trailing whitespace is ignored. Everything
 -      but a SHA-1 per line will error out on older versions.
 -+
 -This feature is useful when an established project should be accepted
 -despite early commits containing errors that can be safely ignored
 -such as invalid committer email addresses.  Note: corrupt objects
 -cannot be skipped with this setting.
 -+
 -Like `fsck.<msg-id>` this variable has corresponding
 -`receive.fsck.skipList` and `fetch.fsck.skipList` variants.
 -+
 -Unlike variables like `color.ui` and `core.editor` the
 -`receive.fsck.skipList` and `fetch.fsck.skipList` variables will not
 -fall back on the `fsck.skipList` configuration if they aren't set. To
 -uniformly configure the same fsck settings in different circumstances
 -all three of them they must all set to the same values.
 -+
 -Older versions of Git (before 2.20) documented that the object names
 -list should be sorted. This was never a requirement, the object names
 -could appear in any order, but when reading the list we tracked whether
 -the list was sorted for the purposes of an internal binary search
 -implementation, which could save itself some work with an already sorted
 -list. Unless you had a humongous list there was no reason to go out of
 -your way to pre-sort the list. After Git version 2.20 a hash implementation
 -is used instead, so there's now no reason to pre-sort the list.
 -
 -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].
 -
 -include::gitcvs-config.txt[]
 -
 -gitweb.category::
 -gitweb.description::
 -gitweb.owner::
 -gitweb.url::
 -      See linkgit:gitweb[1] for description.
 -
 -gitweb.avatar::
 -gitweb.blame::
 -gitweb.grep::
 -gitweb.highlight::
 -gitweb.patches::
 -gitweb.pickaxe::
 -gitweb.remote_heads::
 -gitweb.showSizes::
 -gitweb.snapshot::
 -      See linkgit:gitweb.conf[5] for description.
 -
 -grep.lineNumber::
 -      If set to true, enable `-n` option by default.
 -
 -grep.column::
 -      If set to true, enable the `--column` option by default.
 -
 -grep.patternType::
 -      Set the default matching behavior. Using a value of 'basic', 'extended',
 -      'fixed', or 'perl' will enable the `--basic-regexp`, `--extended-regexp`,
 -      `--fixed-strings`, or `--perl-regexp` option accordingly, while the
 -      value 'default' will return to the default matching behavior.
 -
 -grep.extendedRegexp::
 -      If set to true, enable `--extended-regexp` option by default. This
 -      option is ignored when the `grep.patternType` option is set to a value
 -      other than 'default'.
 -
 -grep.threads::
 -      Number of grep worker threads to use.
 -      See `grep.threads` in linkgit:git-grep[1] for more information.
 -
 -grep.fallbackToNoIndex::
 -      If set to true, fall back to git grep --no-index if git grep
 -      is executed outside of a git repository.  Defaults to false.
 -
 -gpg.program::
 -      Use this custom program instead of "`gpg`" found on `$PATH` when
 -      making or verifying a PGP signature. The program must support the
 -      same command-line interface as GPG, namely, to verify a detached
 -      signature, "`gpg --verify $file - <$signature`" is run, and the
 -      program is expected to signal a good signature by exiting with
 -      code 0, and to generate an ASCII-armored detached signature, the
 -      standard input of "`gpg -bsau $key`" is fed with the contents to be
 -      signed, and the program is expected to send the result to its
 -      standard output.
 -
 -gpg.format::
 -      Specifies which key format to use when signing with `--gpg-sign`.
 -      Default is "openpgp" and another possible value is "x509".
 -
 -gpg.<format>.program::
 -      Use this to customize the program used for the signing format you
 -      chose. (see `gpg.program` and `gpg.format`) `gpg.program` can still
 -      be used as a legacy synonym for `gpg.openpgp.program`. The default
 -      value for `gpg.x509.program` is "gpgsm".
 -
 -include::gui-config.txt[]
 -
 -guitool.<name>.cmd::
 -      Specifies the shell command line to execute when the corresponding item
 -      of the linkgit:git-gui[1] `Tools` menu is invoked. This option is
 -      mandatory for every tool. The command is executed from the root of
 -      the working directory, and in the environment it receives the name of
 -      the tool as `GIT_GUITOOL`, the name of the currently selected file as
 -      'FILENAME', and the name of the current branch as 'CUR_BRANCH' (if
 -      the head is detached, 'CUR_BRANCH' is empty).
 -
 -guitool.<name>.needsFile::
 -      Run the tool only if a diff is selected in the GUI. It guarantees
 -      that 'FILENAME' is not empty.
 -
 -guitool.<name>.noConsole::
 -      Run the command silently, without creating a window to display its
 -      output.
 -
 -guitool.<name>.noRescan::
 -      Don't rescan the working directory for changes after the tool
 -      finishes execution.
 -
 -guitool.<name>.confirm::
 -      Show a confirmation dialog before actually running the tool.
 -
 -guitool.<name>.argPrompt::
 -      Request a string argument from the user, and pass it to the tool
 -      through the `ARGS` environment variable. Since requesting an
 -      argument implies confirmation, the 'confirm' option has no effect
 -      if this is enabled. If the option is set to 'true', 'yes', or '1',
 -      the dialog uses a built-in generic prompt; otherwise the exact
 -      value of the variable is used.
 -
 -guitool.<name>.revPrompt::
 -      Request a single valid revision from the user, and set the
 -      `REVISION` environment variable. In other aspects this option
 -      is similar to 'argPrompt', and can be used together with it.
 -
 -guitool.<name>.revUnmerged::
 -      Show only unmerged branches in the 'revPrompt' subdialog.
 -      This is useful for tools similar to merge or rebase, but not
 -      for things like checkout or reset.
 -
 -guitool.<name>.title::
 -      Specifies the title to use for the prompt dialog. The default
 -      is the tool name.
 -
 -guitool.<name>.prompt::
 -      Specifies the general prompt string to display at the top of
 -      the dialog, before subsections for 'argPrompt' and 'revPrompt'.
 -      The default value includes the actual command.
 -
 -help.browser::
 -      Specify the browser that will be used to display help in the
 -      'web' format. See linkgit:git-help[1].
 -
 -help.format::
 -      Override the default help format used by linkgit:git-help[1].
 -      Values 'man', 'info', 'web' and 'html' are supported. 'man' is
 -      the default. 'web' and 'html' are the same.
 -
 -help.autoCorrect::
 -      Automatically correct and execute mistyped commands after
 -      waiting for the given number of deciseconds (0.1 sec). If more
 -      than one command can be deduced from the entered text, nothing
 -      will be executed.  If the value of this option is negative,
 -      the corrected command will be executed immediately. If the
 -      value is 0 - the command will be just shown but not executed.
 -      This is the default.
 -
 -help.htmlPath::
 -      Specify the path where the HTML documentation resides. File system paths
 -      and URLs are supported. HTML pages will be prefixed with this path when
 -      help is displayed in the 'web' format. This defaults to the documentation
 -      path of your Git installation.
 -
 -http.proxy::
 -      Override the HTTP proxy, normally configured using the 'http_proxy',
 -      'https_proxy', and 'all_proxy' environment variables (see `curl(1)`). In
 -      addition to the syntax understood by curl, it is possible to specify a
 -      proxy string with a user name but no password, in which case git will
 -      attempt to acquire one in the same way it does for other credentials. See
 -      linkgit:gitcredentials[7] for more information. The syntax thus is
 -      '[protocol://][user[:password]@]proxyhost[:port]'. This can be overridden
 -      on a per-remote basis; see remote.<name>.proxy
 -
 -http.proxyAuthMethod::
 -      Set the method with which to authenticate against the HTTP proxy. This
 -      only takes effect if the configured proxy string contains a user name part
 -      (i.e. is of the form 'user@host' or 'user@host:port'). This can be
 -      overridden on a per-remote basis; see `remote.<name>.proxyAuthMethod`.
 -      Both can be overridden by the `GIT_HTTP_PROXY_AUTHMETHOD` environment
 -      variable.  Possible values are:
 -+
 ---
 -* `anyauth` - Automatically pick a suitable authentication method. It is
 -  assumed that the proxy answers an unauthenticated request with a 407
 -  status code and one or more Proxy-authenticate headers with supported
 -  authentication methods. This is the default.
 -* `basic` - HTTP Basic authentication
 -* `digest` - HTTP Digest authentication; this prevents the password from being
 -  transmitted to the proxy in clear text
 -* `negotiate` - GSS-Negotiate authentication (compare the --negotiate option
 -  of `curl(1)`)
 -* `ntlm` - NTLM authentication (compare the --ntlm option of `curl(1)`)
 ---
 -
 -http.emptyAuth::
 -      Attempt authentication without seeking a username or password.  This
 -      can be used to attempt GSS-Negotiate authentication without specifying
 -      a username in the URL, as libcurl normally requires a username for
 -      authentication.
 -
 -http.delegation::
 -      Control GSSAPI credential delegation. The delegation is disabled
 -      by default in libcurl since version 7.21.7. Set parameter to tell
 -      the server what it is allowed to delegate when it comes to user
 -      credentials. Used with GSS/kerberos. Possible values are:
 -+
 ---
 -* `none` - Don't allow any delegation.
 -* `policy` - Delegates if and only if the OK-AS-DELEGATE flag is set in the
 -  Kerberos service ticket, which is a matter of realm policy.
 -* `always` - Unconditionally allow the server to delegate.
 ---
 -
 -
 -http.extraHeader::
 -      Pass an additional HTTP header when communicating with a server.  If
 -      more than one such entry exists, all of them are added as extra
 -      headers.  To allow overriding the settings inherited from the system
 -      config, an empty value will reset the extra headers to the empty list.
 -
 -http.cookieFile::
 -      The pathname of a file containing previously stored cookie lines,
 -      which should be used
 -      in the Git http session, if they match the server. The file format
 -      of the file to read cookies from should be plain HTTP headers or
 -      the Netscape/Mozilla cookie file format (see `curl(1)`).
 -      NOTE that the file specified with http.cookieFile is used only as
 -      input unless http.saveCookies is set.
 -
 -http.saveCookies::
 -      If set, store cookies received during requests to the file specified by
 -      http.cookieFile. Has no effect if http.cookieFile is unset.
 -
 -http.sslVersion::
 -      The SSL version to use when negotiating an SSL connection, if you
 -      want to force the default.  The available and default version
 -      depend on whether libcurl was built against NSS or OpenSSL and the
 -      particular configuration of the crypto library in use. Internally
 -      this sets the 'CURLOPT_SSL_VERSION' option; see the libcurl
 -      documentation for more details on the format of this option and
 -      for the ssl version supported. Actually the possible values of
 -      this option are:
 -
 -      - sslv2
 -      - sslv3
 -      - tlsv1
 -      - tlsv1.0
 -      - tlsv1.1
 -      - tlsv1.2
 -      - tlsv1.3
 +include::config/am.txt[]
  
 -+
 -Can be overridden by the `GIT_SSL_VERSION` environment variable.
 -To force git to use libcurl's default ssl version and ignore any
 -explicit http.sslversion option, set `GIT_SSL_VERSION` to the
 -empty string.
 -
 -http.sslCipherList::
 -  A list of SSL ciphers to use when negotiating an SSL connection.
 -  The available ciphers depend on whether libcurl was built against
 -  NSS or OpenSSL and the particular configuration of the crypto
 -  library in use.  Internally this sets the 'CURLOPT_SSL_CIPHER_LIST'
 -  option; see the libcurl documentation for more details on the format
 -  of this list.
 -+
 -Can be overridden by the `GIT_SSL_CIPHER_LIST` environment variable.
 -To force git to use libcurl's default cipher list and ignore any
 -explicit http.sslCipherList option, set `GIT_SSL_CIPHER_LIST` to the
 -empty string.
 -
 -http.sslVerify::
 -      Whether to verify the SSL certificate when fetching or pushing
 -      over HTTPS. Defaults to true. Can be overridden by the
 -      `GIT_SSL_NO_VERIFY` environment variable.
 -
 -http.sslCert::
 -      File containing the SSL certificate when fetching or pushing
 -      over HTTPS. Can be overridden by the `GIT_SSL_CERT` environment
 -      variable.
 -
 -http.sslKey::
 -      File containing the SSL private key when fetching or pushing
 -      over HTTPS. Can be overridden by the `GIT_SSL_KEY` environment
 -      variable.
 -
 -http.sslCertPasswordProtected::
 -      Enable Git's password prompt for the SSL certificate.  Otherwise
 -      OpenSSL will prompt the user, possibly many times, if the
 -      certificate or private key is encrypted.  Can be overridden by the
 -      `GIT_SSL_CERT_PASSWORD_PROTECTED` environment variable.
 -
 -http.sslCAInfo::
 -      File containing the certificates to verify the peer with when
 -      fetching or pushing over HTTPS. Can be overridden by the
 -      `GIT_SSL_CAINFO` environment variable.
 -
 -http.sslCAPath::
 -      Path containing files with the CA certificates to verify the peer
 -      with when fetching or pushing over HTTPS. Can be overridden
 -      by the `GIT_SSL_CAPATH` environment variable.
 -
 -http.pinnedpubkey::
 -      Public key of the https service. It may either be the filename of
 -      a PEM or DER encoded public key file or a string starting with
 -      'sha256//' followed by the base64 encoded sha256 hash of the
 -      public key. See also libcurl 'CURLOPT_PINNEDPUBLICKEY'. git will
 -      exit with an error if this option is set but not supported by
 -      cURL.
 -
 -http.sslTry::
 -      Attempt to use AUTH SSL/TLS and encrypted data transfers
 -      when connecting via regular FTP protocol. This might be needed
 -      if the FTP server requires it for security reasons or you wish
 -      to connect securely whenever remote FTP server supports it.
 -      Default is false since it might trigger certificate verification
 -      errors on misconfigured servers.
 -
 -http.maxRequests::
 -      How many HTTP requests to launch in parallel. Can be overridden
 -      by the `GIT_HTTP_MAX_REQUESTS` environment variable. Default is 5.
 -
 -http.minSessions::
 -      The number of curl sessions (counted across slots) to be kept across
 -      requests. They will not be ended with curl_easy_cleanup() until
 -      http_cleanup() is invoked. If USE_CURL_MULTI is not defined, this
 -      value will be capped at 1. Defaults to 1.
 -
 -http.postBuffer::
 -      Maximum size in bytes of the buffer used by smart HTTP
 -      transports when POSTing data to the remote system.
 -      For requests larger than this buffer size, HTTP/1.1 and
 -      Transfer-Encoding: chunked is used to avoid creating a
 -      massive pack file locally.  Default is 1 MiB, which is
 -      sufficient for most requests.
 -
 -http.lowSpeedLimit, http.lowSpeedTime::
 -      If the HTTP transfer speed is less than 'http.lowSpeedLimit'
 -      for longer than 'http.lowSpeedTime' seconds, the transfer is aborted.
 -      Can be overridden by the `GIT_HTTP_LOW_SPEED_LIMIT` and
 -      `GIT_HTTP_LOW_SPEED_TIME` environment variables.
 -
 -http.noEPSV::
 -      A boolean which disables using of EPSV ftp command by curl.
 -      This can helpful with some "poor" ftp servers which don't
 -      support EPSV mode. Can be overridden by the `GIT_CURL_FTP_NO_EPSV`
 -      environment variable. Default is false (curl will use EPSV).
 -
 -http.userAgent::
 -      The HTTP USER_AGENT string presented to an HTTP server.  The default
 -      value represents the version of the client Git such as git/1.7.1.
 -      This option allows you to override this value to a more common value
 -      such as Mozilla/4.0.  This may be necessary, for instance, if
 -      connecting through a firewall that restricts HTTP connections to a set
 -      of common USER_AGENT strings (but not including those like git/1.7.1).
 -      Can be overridden by the `GIT_HTTP_USER_AGENT` environment variable.
 -
 -http.followRedirects::
 -      Whether git should follow HTTP redirects. If set to `true`, git
 -      will transparently follow any redirect issued by a server it
 -      encounters. If set to `false`, git will treat all redirects as
 -      errors. If set to `initial`, git will follow redirects only for
 -      the initial request to a remote, but not for subsequent
 -      follow-up HTTP requests. Since git uses the redirected URL as
 -      the base for the follow-up requests, this is generally
 -      sufficient. The default is `initial`.
 -
 -http.<url>.*::
 -      Any of the http.* options above can be applied selectively to some URLs.
 -      For a config key to match a URL, each element of the config key is
 -      compared to that of the URL, in the following order:
 -+
 ---
 -. Scheme (e.g., `https` in `https://example.com/`). This field
 -  must match exactly between the config key and the URL.
 -
 -. Host/domain name (e.g., `example.com` in `https://example.com/`).
 -  This field must match between the config key and the URL. It is
 -  possible to specify a `*` as part of the host name to match all subdomains
 -  at this level. `https://*.example.com/` for example would match
 -  `https://foo.example.com/`, but not `https://foo.bar.example.com/`.
 -
 -. Port number (e.g., `8080` in `http://example.com:8080/`).
 -  This field must match exactly between the config key and the URL.
 -  Omitted port numbers are automatically converted to the correct
 -  default for the scheme before matching.
 -
 -. Path (e.g., `repo.git` in `https://example.com/repo.git`). The
 -  path field of the config key must match the path field of the URL
 -  either exactly or as a prefix of slash-delimited path elements.  This means
 -  a config key with path `foo/` matches URL path `foo/bar`.  A prefix can only
 -  match on a slash (`/`) boundary.  Longer matches take precedence (so a config
 -  key with path `foo/bar` is a better match to URL path `foo/bar` than a config
 -  key with just path `foo/`).
 -
 -. User name (e.g., `user` in `https://user@example.com/repo.git`). If
 -  the config key has a user name it must match the user name in the
 -  URL exactly. If the config key does not have a user name, that
 -  config key will match a URL with any user name (including none),
 -  but at a lower precedence than a config key with a user name.
 ---
 -+
 -The list above is ordered by decreasing precedence; a URL that matches
 -a config key's path is preferred to one that matches its user name. For example,
 -if the URL is `https://user@example.com/foo/bar` a config key match of
 -`https://example.com/foo` will be preferred over a config key match of
 -`https://user@example.com`.
 -+
 -All URLs are normalized before attempting any matching (the password part,
 -if embedded in the URL, is always ignored for matching purposes) so that
 -equivalent URLs that are simply spelled differently will match properly.
 -Environment variable settings always override any matches.  The URLs that are
 -matched against are those given directly to Git commands.  This means any URLs
 -visited as a result of a redirection do not participate in matching.
 -
 -ssh.variant::
 -      By default, Git determines the command line arguments to use
 -      based on the basename of the configured SSH command (configured
 -      using the environment variable `GIT_SSH` or `GIT_SSH_COMMAND` or
 -      the config setting `core.sshCommand`). If the basename is
 -      unrecognized, Git will attempt to detect support of OpenSSH
 -      options by first invoking the configured SSH command with the
 -      `-G` (print configuration) option and will subsequently use
 -      OpenSSH options (if that is successful) or no options besides
 -      the host and remote command (if it fails).
 -+
 -The config variable `ssh.variant` can be set to override this detection.
 -Valid values are `ssh` (to use OpenSSH options), `plink`, `putty`,
 -`tortoiseplink`, `simple` (no options except the host and remote command).
 -The default auto-detection can be explicitly requested using the value
 -`auto`.  Any other value is treated as `ssh`.  This setting can also be
 -overridden via the environment variable `GIT_SSH_VARIANT`.
 -+
 -The current command-line parameters used for each variant are as
 -follows:
 -+
 ---
 +include::config/apply.txt[]
  
 -* `ssh` - [-p port] [-4] [-6] [-o option] [username@]host command
 +include::config/blame.txt[]
  
 -* `simple` - [username@]host command
 +include::config/branch.txt[]
  
 -* `plink` or `putty` - [-P port] [-4] [-6] [username@]host command
 +include::config/browser.txt[]
  
 -* `tortoiseplink` - [-P port] [-4] [-6] -batch [username@]host command
 +include::config/checkout.txt[]
  
 ---
 -+
 -Except for the `simple` variant, command-line parameters are likely to
 -change as git gains new features.
 -
 -i18n.commitEncoding::
 -      Character encoding the commit messages are stored in; Git itself
 -      does not care per se, but this information is necessary e.g. when
 -      importing commits from emails or in the gitk graphical history
 -      browser (and possibly at other places in the future or in other
 -      porcelains). See e.g. linkgit:git-mailinfo[1]. Defaults to 'utf-8'.
 -
 -i18n.logOutputEncoding::
 -      Character encoding the commit messages are converted to when
 -      running 'git log' and friends.
 -
 -imap::
 -      The configuration variables in the 'imap' section are described
 -      in linkgit:git-imap-send[1].
 -
 -index.threads::
 -      Specifies the number of threads to spawn when loading the index.
 -      This is meant to reduce index load time on multiprocessor machines.
 -      Specifying 0 or 'true' will cause Git to auto-detect the number of
 -      CPU's and set the number of threads accordingly. Specifying 1 or
 -      'false' will disable multithreading. Defaults to 'true'.
 -
 -index.version::
 -      Specify the version with which new index files should be
 -      initialized.  This does not affect existing repositories.
 -
 -init.templateDir::
 -      Specify the directory from which templates will be copied.
 -      (See the "TEMPLATE DIRECTORY" section of linkgit:git-init[1].)
 -
 -instaweb.browser::
 -      Specify the program that will be used to browse your working
 -      repository in gitweb. See linkgit:git-instaweb[1].
 -
 -instaweb.httpd::
 -      The HTTP daemon command-line to start gitweb on your working
 -      repository. See linkgit:git-instaweb[1].
 -
 -instaweb.local::
 -      If true the web server started by linkgit:git-instaweb[1] will
 -      be bound to the local IP (127.0.0.1).
 -
 -instaweb.modulePath::
 -      The default module path for linkgit:git-instaweb[1] to use
 -      instead of /usr/lib/apache2/modules.  Only used if httpd
 -      is Apache.
 -
 -instaweb.port::
 -      The port number to bind the gitweb httpd to. See
 -      linkgit:git-instaweb[1].
 -
 -interactive.singleKey::
 -      In interactive commands, allow the user to provide one-letter
 -      input with a single key (i.e., without hitting enter).
 -      Currently this is used by the `--patch` mode of
 -      linkgit:git-add[1], linkgit:git-checkout[1], linkgit:git-commit[1],
 -      linkgit:git-reset[1], and linkgit:git-stash[1]. Note that this
 -      setting is silently ignored if portable keystroke input
 -      is not available; requires the Perl module Term::ReadKey.
 -
 -interactive.diffFilter::
 -      When an interactive command (such as `git add --patch`) shows
 -      a colorized diff, git will pipe the diff through the shell
 -      command defined by this configuration variable. The command may
 -      mark up the diff further for human consumption, provided that it
 -      retains a one-to-one correspondence with the lines in the
 -      original diff. Defaults to disabled (no filtering).
 -
 -log.abbrevCommit::
 -      If true, makes linkgit:git-log[1], linkgit:git-show[1], and
 -      linkgit:git-whatchanged[1] assume `--abbrev-commit`. You may
 -      override this option with `--no-abbrev-commit`.
 -
 -log.date::
 -      Set the default date-time mode for the 'log' command.
 -      Setting a value for log.date is similar to using 'git log''s
 -      `--date` option.  See linkgit:git-log[1] for details.
 -
 -log.decorate::
 -      Print out the ref names of any commits that are shown by the log
 -      command. If 'short' is specified, the ref name prefixes 'refs/heads/',
 -      'refs/tags/' and 'refs/remotes/' will not be printed. If 'full' is
 -      specified, the full ref name (including prefix) will be printed.
 -      If 'auto' is specified, then if the output is going to a terminal,
 -      the ref names are shown as if 'short' were given, otherwise no ref
 -      names are shown. This is the same as the `--decorate` option
 -      of the `git log`.
 -
 -log.follow::
 -      If `true`, `git log` will act as if the `--follow` option was used when
 -      a single <path> is given.  This has the same limitations as `--follow`,
 -      i.e. it cannot be used to follow multiple files and does not work well
 -      on non-linear history.
 -
 -log.graphColors::
 -      A list of colors, separated by commas, that can be used to draw
 -      history lines in `git log --graph`.
 -
 -log.showRoot::
 -      If true, the initial commit will be shown as a big creation event.
 -      This is equivalent to a diff against an empty tree.
 -      Tools like linkgit:git-log[1] or linkgit:git-whatchanged[1], which
 -      normally hide the root commit will now show it. True by default.
 -
 -log.showSignature::
 -      If true, makes linkgit:git-log[1], linkgit:git-show[1], and
 -      linkgit:git-whatchanged[1] assume `--show-signature`.
 -
 -log.mailmap::
 -      If true, makes linkgit:git-log[1], linkgit:git-show[1], and
 -      linkgit:git-whatchanged[1] assume `--use-mailmap`.
 -
 -mailinfo.scissors::
 -      If true, makes linkgit:git-mailinfo[1] (and therefore
 -      linkgit:git-am[1]) act by default as if the --scissors option
 -      was provided on the command-line. When active, this features
 -      removes everything from the message body before a scissors
 -      line (i.e. consisting mainly of ">8", "8<" and "-").
 -
 -mailmap.file::
 -      The location of an augmenting mailmap file. The default
 -      mailmap, located in the root of the repository, is loaded
 -      first, then the mailmap file pointed to by this variable.
 -      The location of the mailmap file may be in a repository
 -      subdirectory, or somewhere outside of the repository itself.
 -      See linkgit:git-shortlog[1] and linkgit:git-blame[1].
 -
 -mailmap.blob::
 -      Like `mailmap.file`, but consider the value as a reference to a
 -      blob in the repository. If both `mailmap.file` and
 -      `mailmap.blob` are given, both are parsed, with entries from
 -      `mailmap.file` taking precedence. In a bare repository, this
 -      defaults to `HEAD:.mailmap`. In a non-bare repository, it
 -      defaults to empty.
 -
 -man.viewer::
 -      Specify the programs that may be used to display help in the
 -      'man' format. See linkgit:git-help[1].
 -
 -man.<tool>.cmd::
 -      Specify the command to invoke the specified man viewer. The
 -      specified command is evaluated in shell with the man page
 -      passed as argument. (See linkgit:git-help[1].)
 -
 -man.<tool>.path::
 -      Override the path for the given tool that may be used to
 -      display help in the 'man' format. See linkgit:git-help[1].
 -
 -include::merge-config.txt[]
 -
 -mergetool.<tool>.path::
 -      Override the path for the given tool.  This is useful in case
 -      your tool is not in the PATH.
 -
 -mergetool.<tool>.cmd::
 -      Specify the command to invoke the specified merge tool.  The
 -      specified command is evaluated in shell with the following
 -      variables available: 'BASE' is the name of a temporary file
 -      containing the common base of the files to be merged, if available;
 -      'LOCAL' is the name of a temporary file containing the contents of
 -      the file on the current branch; 'REMOTE' is the name of a temporary
 -      file containing the contents of the file from the branch being
 -      merged; 'MERGED' contains the name of the file to which the merge
 -      tool should write the results of a successful merge.
 -
 -mergetool.<tool>.trustExitCode::
 -      For a custom merge command, specify whether the exit code of
 -      the merge command can be used to determine whether the merge was
 -      successful.  If this is not set to true then the merge target file
 -      timestamp is checked and the merge assumed to have been successful
 -      if the file has been updated, otherwise the user is prompted to
 -      indicate the success of the merge.
 -
 -mergetool.meld.hasOutput::
 -      Older versions of `meld` do not support the `--output` option.
 -      Git will attempt to detect whether `meld` supports `--output`
 -      by inspecting the output of `meld --help`.  Configuring
 -      `mergetool.meld.hasOutput` will make Git skip these checks and
 -      use the configured value instead.  Setting `mergetool.meld.hasOutput`
 -      to `true` tells Git to unconditionally use the `--output` option,
 -      and `false` avoids using `--output`.
 -
 -mergetool.keepBackup::
 -      After performing a merge, the original file with conflict markers
 -      can be saved as a file with a `.orig` extension.  If this variable
 -      is set to `false` then this file is not preserved.  Defaults to
 -      `true` (i.e. keep the backup files).
 -
 -mergetool.keepTemporaries::
 -      When invoking a custom merge tool, Git uses a set of temporary
 -      files to pass to the tool. If the tool returns an error and this
 -      variable is set to `true`, then these temporary files will be
 -      preserved, otherwise they will be removed after the tool has
 -      exited. Defaults to `false`.
 -
 -mergetool.writeToTemp::
 -      Git writes temporary 'BASE', 'LOCAL', and 'REMOTE' versions of
 -      conflicting files in the worktree by default.  Git will attempt
 -      to use a temporary directory for these files when set `true`.
 -      Defaults to `false`.
 -
 -mergetool.prompt::
 -      Prompt before each invocation of the merge resolution program.
 -
 -notes.mergeStrategy::
 -      Which merge strategy to choose by default when resolving notes
 -      conflicts.  Must be one of `manual`, `ours`, `theirs`, `union`, or
 -      `cat_sort_uniq`.  Defaults to `manual`.  See "NOTES MERGE STRATEGIES"
 -      section of linkgit:git-notes[1] for more information on each strategy.
 -
 -notes.<name>.mergeStrategy::
 -      Which merge strategy to choose when doing a notes merge into
 -      refs/notes/<name>.  This overrides the more general
 -      "notes.mergeStrategy".  See the "NOTES MERGE STRATEGIES" section in
 -      linkgit:git-notes[1] for more information on the available strategies.
 -
 -notes.displayRef::
 -      The (fully qualified) refname from which to show notes when
 -      showing commit messages.  The value of this variable can be set
 -      to a glob, in which case notes from all matching refs will be
 -      shown.  You may also specify this configuration variable
 -      several times.  A warning will be issued for refs that do not
 -      exist, but a glob that does not match any refs is silently
 -      ignored.
 -+
 -This setting can be overridden with the `GIT_NOTES_DISPLAY_REF`
 -environment variable, which must be a colon separated list of refs or
 -globs.
 -+
 -The effective value of "core.notesRef" (possibly overridden by
 -GIT_NOTES_REF) is also implicitly added to the list of refs to be
 -displayed.
 -
 -notes.rewrite.<command>::
 -      When rewriting commits with <command> (currently `amend` or
 -      `rebase`) and this variable is set to `true`, Git
 -      automatically copies your notes from the original to the
 -      rewritten commit.  Defaults to `true`, but see
 -      "notes.rewriteRef" below.
 -
 -notes.rewriteMode::
 -      When copying notes during a rewrite (see the
 -      "notes.rewrite.<command>" option), determines what to do if
 -      the target commit already has a note.  Must be one of
 -      `overwrite`, `concatenate`, `cat_sort_uniq`, or `ignore`.
 -      Defaults to `concatenate`.
 -+
 -This setting can be overridden with the `GIT_NOTES_REWRITE_MODE`
 -environment variable.
 -
 -notes.rewriteRef::
 -      When copying notes during a rewrite, specifies the (fully
 -      qualified) ref whose notes should be copied.  The ref may be a
 -      glob, in which case notes in all matching refs will be copied.
 -      You may also specify this configuration several times.
 -+
 -Does not have a default value; you must configure this variable to
 -enable note rewriting.  Set it to `refs/notes/commits` to enable
 -rewriting for the default commit notes.
 -+
 -This setting can be overridden with the `GIT_NOTES_REWRITE_REF`
 -environment variable, which must be a colon separated list of refs or
 -globs.
 -
 -pack.window::
 -      The size of the window used by linkgit:git-pack-objects[1] when no
 -      window size is given on the command line. Defaults to 10.
 -
 -pack.depth::
 -      The maximum delta depth used by linkgit:git-pack-objects[1] when no
 -      maximum depth is given on the command line. Defaults to 50.
 -      Maximum value is 4095.
 -
 -pack.windowMemory::
 -      The maximum size of memory that is consumed by each thread
 -      in linkgit:git-pack-objects[1] for pack window memory when
 -      no limit is given on the command line.  The value can be
 -      suffixed with "k", "m", or "g".  When left unconfigured (or
 -      set explicitly to 0), there will be no limit.
 -
 -pack.compression::
 -      An integer -1..9, indicating the compression level for objects
 -      in a pack file. -1 is the zlib default. 0 means no
 -      compression, and 1..9 are various speed/size tradeoffs, 9 being
 -      slowest.  If not set,  defaults to core.compression.  If that is
 -      not set,  defaults to -1, the zlib default, which is "a default
 -      compromise between speed and compression (currently equivalent
 -      to level 6)."
 -+
 -Note that changing the compression level will not automatically recompress
 -all existing objects. You can force recompression by passing the -F option
 -to linkgit:git-repack[1].
 -
 -pack.island::
 -      An extended regular expression configuring a set of delta
 -      islands. See "DELTA ISLANDS" in linkgit:git-pack-objects[1]
 -      for details.
 -
 -pack.islandCore::
 -      Specify an island name which gets to have its objects be
 -      packed first. This creates a kind of pseudo-pack at the front
 -      of one pack, so that the objects from the specified island are
 -      hopefully faster to copy into any pack that should be served
 -      to a user requesting these objects. In practice this means
 -      that the island specified should likely correspond to what is
 -      the most commonly cloned in the repo. See also "DELTA ISLANDS"
 -      in linkgit:git-pack-objects[1].
 -
 -pack.deltaCacheSize::
 -      The maximum memory in bytes used for caching deltas in
 -      linkgit:git-pack-objects[1] before writing them out to a pack.
 -      This cache is used to speed up the writing object phase by not
 -      having to recompute the final delta result once the best match
 -      for all objects is found.  Repacking large repositories on machines
 -      which are tight with memory might be badly impacted by this though,
 -      especially if this cache pushes the system into swapping.
 -      A value of 0 means no limit. The smallest size of 1 byte may be
 -      used to virtually disable this cache. Defaults to 256 MiB.
 -
 -pack.deltaCacheLimit::
 -      The maximum size of a delta, that is cached in
 -      linkgit:git-pack-objects[1]. This cache is used to speed up the
 -      writing object phase by not having to recompute the final delta
 -      result once the best match for all objects is found.
 -      Defaults to 1000. Maximum value is 65535.
 -
 -pack.threads::
 -      Specifies the number of threads to spawn when searching for best
 -      delta matches.  This requires that linkgit:git-pack-objects[1]
 -      be compiled with pthreads otherwise this option is ignored with a
 -      warning. This is meant to reduce packing time on multiprocessor
 -      machines. The required amount of memory for the delta search window
 -      is however multiplied by the number of threads.
 -      Specifying 0 will cause Git to auto-detect the number of CPU's
 -      and set the number of threads accordingly.
 -
 -pack.indexVersion::
 -      Specify the default pack index version.  Valid values are 1 for
 -      legacy pack index used by Git versions prior to 1.5.2, and 2 for
 -      the new pack index with capabilities for packs larger than 4 GB
 -      as well as proper protection against the repacking of corrupted
 -      packs.  Version 2 is the default.  Note that version 2 is enforced
 -      and this config option ignored whenever the corresponding pack is
 -      larger than 2 GB.
 -+
 -If you have an old Git that does not understand the version 2 `*.idx` file,
 -cloning or fetching over a non native protocol (e.g. "http")
 -that will copy both `*.pack` file and corresponding `*.idx` file from the
 -other side may give you a repository that cannot be accessed with your
 -older version of Git. If the `*.pack` file is smaller than 2 GB, however,
 -you can use linkgit:git-index-pack[1] on the *.pack file to regenerate
 -the `*.idx` file.
 -
 -pack.packSizeLimit::
 -      The maximum size of a pack.  This setting only affects
 -      packing to a file when repacking, i.e. the git:// protocol
 -      is unaffected.  It can be overridden by the `--max-pack-size`
 -      option of linkgit:git-repack[1].  Reaching this limit results
 -      in the creation of multiple packfiles; which in turn prevents
 -      bitmaps from being created.
 -      The minimum size allowed is limited to 1 MiB.
 -      The default is unlimited.
 -      Common unit suffixes of 'k', 'm', or 'g' are
 -      supported.
 -
 -pack.useBitmaps::
 -      When true, git will use pack bitmaps (if available) when packing
 -      to stdout (e.g., during the server side of a fetch). Defaults to
 -      true. You should not generally need to turn this off unless
 -      you are debugging pack bitmaps.
 -
 -pack.writeBitmaps (deprecated)::
 -      This is a deprecated synonym for `repack.writeBitmaps`.
 -
 -pack.writeBitmapHashCache::
 -      When true, git will include a "hash cache" section in the bitmap
 -      index (if one is written). This cache can be used to feed git's
 -      delta heuristics, potentially leading to better deltas between
 -      bitmapped and non-bitmapped objects (e.g., when serving a fetch
 -      between an older, bitmapped pack and objects that have been
 -      pushed since the last gc). The downside is that it consumes 4
 -      bytes per object of disk space, and that JGit's bitmap
 -      implementation does not understand it, causing it to complain if
 -      Git and JGit are used on the same repository. Defaults to false.
 -
 -pager.<cmd>::
 -      If the value is boolean, turns on or off pagination of the
 -      output of a particular Git subcommand when writing to a tty.
 -      Otherwise, turns on pagination for the subcommand using the
 -      pager specified by the value of `pager.<cmd>`.  If `--paginate`
 -      or `--no-pager` is specified on the command line, it takes
 -      precedence over this option.  To disable pagination for all
 -      commands, set `core.pager` or `GIT_PAGER` to `cat`.
 -
 -pretty.<name>::
 -      Alias for a --pretty= format string, as specified in
 -      linkgit:git-log[1]. Any aliases defined here can be used just
 -      as the built-in pretty formats could. For example,
 -      running `git config pretty.changelog "format:* %H %s"`
 -      would cause the invocation `git log --pretty=changelog`
 -      to be equivalent to running `git log "--pretty=format:* %H %s"`.
 -      Note that an alias with the same name as a built-in format
 -      will be silently ignored.
 -
 -protocol.allow::
 -      If set, provide a user defined default policy for all protocols which
 -      don't explicitly have a policy (`protocol.<name>.allow`).  By default,
 -      if unset, known-safe protocols (http, https, git, ssh, file) have a
 -      default policy of `always`, known-dangerous protocols (ext) have a
 -      default policy of `never`, and all other protocols have a default
 -      policy of `user`.  Supported policies:
 -+
 ---
 +include::config/clean.txt[]
  
 -* `always` - protocol is always able to be used.
 +include::config/color.txt[]
  
 -* `never` - protocol is never able to be used.
 +include::config/column.txt[]
  
 -* `user` - protocol is only able to be used when `GIT_PROTOCOL_FROM_USER` is
 -  either unset or has a value of 1.  This policy should be used when you want a
 -  protocol to be directly usable by the user but don't want it used by commands which
 -  execute clone/fetch/push commands without user input, e.g. recursive
 -  submodule initialization.
 +include::config/commit.txt[]
  
 ---
 +include::config/credential.txt[]
  
 -protocol.<name>.allow::
 -      Set a policy to be used by protocol `<name>` with clone/fetch/push
 -      commands. See `protocol.allow` above for the available policies.
 -+
 -The protocol names currently used by git are:
 -+
 ---
 -  - `file`: any local file-based path (including `file://` URLs,
 -    or local paths)
 -
 -  - `git`: the anonymous git protocol over a direct TCP
 -    connection (or proxy, if configured)
 -
 -  - `ssh`: git over ssh (including `host:path` syntax,
 -    `ssh://`, etc).
 -
 -  - `http`: git over http, both "smart http" and "dumb http".
 -    Note that this does _not_ include `https`; if you want to configure
 -    both, you must do so individually.
 -
 -  - any external helpers are named by their protocol (e.g., use
 -    `hg` to allow the `git-remote-hg` helper)
 ---
 -
 -protocol.version::
 -      Experimental. If set, clients will attempt to communicate with a
 -      server using the specified protocol version.  If unset, no
 -      attempt will be made by the client to communicate using a
 -      particular protocol version, this results in protocol version 0
 -      being used.
 -      Supported versions:
 -+
 ---
 +include::config/completion.txt[]
  
 -* `0` - the original wire protocol.
 +include::config/diff.txt[]
  
 -* `1` - the original wire protocol with the addition of a version string
 -  in the initial response from the server.
 +include::config/difftool.txt[]
  
 -* `2` - link:technical/protocol-v2.html[wire protocol version 2].
 +include::config/fastimport.txt[]
  
 ---
 +include::config/fetch.txt[]
  
 -include::pull-config.txt[]
 +include::config/format.txt[]
  
 -include::push-config.txt[]
 +include::config/filter.txt[]
  
 -include::rebase-config.txt[]
 +include::config/fsck.txt[]
  
 -include::receive-config.txt[]
 +include::config/gc.txt[]
  
 -remote.pushDefault::
 -      The remote to push to by default.  Overrides
 -      `branch.<name>.remote` for all branches, and is overridden by
 -      `branch.<name>.pushRemote` for specific branches.
 +include::config/gitcvs.txt[]
  
 -remote.<name>.url::
 -      The URL of a remote repository.  See linkgit:git-fetch[1] or
 -      linkgit:git-push[1].
 +include::config/gitweb.txt[]
  
 -remote.<name>.pushurl::
 -      The push URL of a remote repository.  See linkgit:git-push[1].
 +include::config/grep.txt[]
  
 -remote.<name>.proxy::
 -      For remotes that require curl (http, https and ftp), the URL to
 -      the proxy to use for that remote.  Set to the empty string to
 -      disable proxying for that remote.
 +include::config/gpg.txt[]
  
 -remote.<name>.proxyAuthMethod::
 -      For remotes that require curl (http, https and ftp), the method to use for
 -      authenticating against the proxy in use (probably set in
 -      `remote.<name>.proxy`). See `http.proxyAuthMethod`.
 +include::config/gui.txt[]
  
 -remote.<name>.fetch::
 -      The default set of "refspec" for linkgit:git-fetch[1]. See
 -      linkgit:git-fetch[1].
 +include::config/guitool.txt[]
  
 -remote.<name>.push::
 -      The default set of "refspec" for linkgit:git-push[1]. See
 -      linkgit:git-push[1].
 +include::config/help.txt[]
  
 -remote.<name>.mirror::
 -      If true, pushing to this remote will automatically behave
 -      as if the `--mirror` option was given on the command line.
 +include::config/http.txt[]
  
 -remote.<name>.skipDefaultUpdate::
 -      If true, this remote will be skipped by default when updating
 -      using linkgit:git-fetch[1] or the `update` subcommand of
 -      linkgit:git-remote[1].
 +include::config/i18n.txt[]
  
 -remote.<name>.skipFetchAll::
 -      If true, this remote will be skipped by default when updating
 -      using linkgit:git-fetch[1] or the `update` subcommand of
 -      linkgit:git-remote[1].
 +include::config/imap.txt[]
  
 -remote.<name>.receivepack::
 -      The default program to execute on the remote side when pushing.  See
 -      option --receive-pack of linkgit:git-push[1].
 +include::config/index.txt[]
  
 -remote.<name>.uploadpack::
 -      The default program to execute on the remote side when fetching.  See
 -      option --upload-pack of linkgit:git-fetch-pack[1].
 +include::config/init.txt[]
  
 -remote.<name>.tagOpt::
 -      Setting this value to --no-tags disables automatic tag following when
 -      fetching from remote <name>. Setting it to --tags will fetch every
 -      tag from remote <name>, even if they are not reachable from remote
 -      branch heads. Passing these flags directly to linkgit:git-fetch[1] can
 -      override this setting. See options --tags and --no-tags of
 -      linkgit:git-fetch[1].
 +include::config/instaweb.txt[]
  
 -remote.<name>.vcs::
 -      Setting this to a value <vcs> will cause Git to interact with
 -      the remote with the git-remote-<vcs> helper.
 +include::config/interactive.txt[]
  
 -remote.<name>.prune::
 -      When set to true, fetching from this remote by default will also
 -      remove any remote-tracking references that no longer exist on the
 -      remote (as if the `--prune` option was given on the command line).
 -      Overrides `fetch.prune` settings, if any.
 +include::config/log.txt[]
  
 -remote.<name>.pruneTags::
 -      When set to true, fetching from this remote by default will also
 -      remove any local tags that no longer exist on the remote if pruning
 -      is activated in general via `remote.<name>.prune`, `fetch.prune` or
 -      `--prune`. Overrides `fetch.pruneTags` settings, if any.
 -+
 -See also `remote.<name>.prune` and the PRUNING section of
 -linkgit:git-fetch[1].
 -
 -remotes.<group>::
 -      The list of remotes which are fetched by "git remote update
 -      <group>".  See linkgit:git-remote[1].
 -
 -repack.useDeltaBaseOffset::
 -      By default, linkgit:git-repack[1] creates packs that use
 -      delta-base offset. If you need to share your repository with
 -      Git older than version 1.4.4, either directly or via a dumb
 -      protocol such as http, then you need to set this option to
 -      "false" and repack. Access from old Git versions over the
 -      native protocol are unaffected by this option.
 -
 -repack.packKeptObjects::
 -      If set to true, makes `git repack` act as if
 -      `--pack-kept-objects` was passed. See linkgit:git-repack[1] for
 -      details. Defaults to `false` normally, but `true` if a bitmap
 -      index is being written (either via `--write-bitmap-index` or
 -      `repack.writeBitmaps`).
 -
 -repack.useDeltaIslands::
 -      If set to true, makes `git repack` act as if `--delta-islands`
 -      was passed. Defaults to `false`.
 -
 -repack.writeBitmaps::
 -      When true, git will write a bitmap index when packing all
 -      objects to disk (e.g., when `git repack -a` is run).  This
 -      index can speed up the "counting objects" phase of subsequent
 -      packs created for clones and fetches, at the cost of some disk
 -      space and extra time spent on the initial repack.  This has
 -      no effect if multiple packfiles are created.
 -      Defaults to false.
 -
 -rerere.autoUpdate::
 -      When set to true, `git-rerere` updates the index with the
 -      resulting contents after it cleanly resolves conflicts using
 -      previously recorded resolution.  Defaults to false.
 -
 -rerere.enabled::
 -      Activate recording of resolved conflicts, so that identical
 -      conflict hunks can be resolved automatically, should they be
 -      encountered again.  By default, linkgit:git-rerere[1] is
 -      enabled if there is an `rr-cache` directory under the
 -      `$GIT_DIR`, e.g. if "rerere" was previously used in the
 -      repository.
 -
 -include::sendemail-config.txt[]
 -
 -sequence.editor::
 -      Text editor used by `git rebase -i` for editing the rebase instruction file.
 -      The value is meant to be interpreted by the shell when it is used.
 -      It can be overridden by the `GIT_SEQUENCE_EDITOR` environment variable.
 -      When not configured the default commit message editor is used instead.
 -
 -showBranch.default::
 -      The default set of branches for linkgit:git-show-branch[1].
 -      See linkgit:git-show-branch[1].
 -
 -splitIndex.maxPercentChange::
 -      When the split index feature is used, this specifies the
 -      percent of entries the split index can contain compared to the
 -      total number of entries in both the split index and the shared
 -      index before a new shared index is written.
 -      The value should be between 0 and 100. If the value is 0 then
 -      a new shared index is always written, if it is 100 a new
 -      shared index is never written.
 -      By default the value is 20, so a new shared index is written
 -      if the number of entries in the split index would be greater
 -      than 20 percent of the total number of entries.
 -      See linkgit:git-update-index[1].
 -
 -splitIndex.sharedIndexExpire::
 -      When the split index feature is used, shared index files that
 -      were not modified since the time this variable specifies will
 -      be removed when a new shared index file is created. The value
 -      "now" expires all entries immediately, and "never" suppresses
 -      expiration altogether.
 -      The default value is "2.weeks.ago".
 -      Note that a shared index file is considered modified (for the
 -      purpose of expiration) each time a new split-index file is
 -      either created based on it or read from it.
 -      See linkgit:git-update-index[1].
 -
 -status.relativePaths::
 -      By default, linkgit:git-status[1] shows paths relative to the
 -      current directory. Setting this variable to `false` shows paths
 -      relative to the repository root (this was the default for Git
 -      prior to v1.5.4).
 -
 -status.short::
 -      Set to true to enable --short by default in linkgit:git-status[1].
 -      The option --no-short takes precedence over this variable.
 -
 -status.branch::
 -      Set to true to enable --branch by default in linkgit:git-status[1].
 -      The option --no-branch takes precedence over this variable.
 -
 -status.displayCommentPrefix::
 -      If set to true, linkgit:git-status[1] will insert a comment
 -      prefix before each output line (starting with
 -      `core.commentChar`, i.e. `#` by default). This was the
 -      behavior of linkgit:git-status[1] in Git 1.8.4 and previous.
 -      Defaults to false.
 -
 -status.renameLimit::
 -      The number of files to consider when performing rename detection
 -      in linkgit:git-status[1] and linkgit:git-commit[1]. Defaults to
 -      the value of diff.renameLimit.
 -
 -status.renames::
 -      Whether and how Git detects renames in linkgit:git-status[1] and
 -      linkgit:git-commit[1] .  If set to "false", rename detection is
 -      disabled. If set to "true", basic rename detection is enabled.
 -      If set to "copies" or "copy", Git will detect copies, as well.
 -      Defaults to the value of diff.renames.
 -
 -status.showStash::
 -      If set to true, linkgit:git-status[1] will display the number of
 -      entries currently stashed away.
 -      Defaults to false.
 -
 -status.showUntrackedFiles::
 -      By default, linkgit:git-status[1] and linkgit:git-commit[1] show
 -      files which are not currently tracked by Git. Directories which
 -      contain only untracked files, are shown with the directory name
 -      only. Showing untracked files means that Git needs to lstat() all
 -      the files in the whole repository, which might be slow on some
 -      systems. So, this variable controls how the commands displays
 -      the untracked files. Possible values are:
 -+
 ---
 -* `no` - Show no untracked files.
 -* `normal` - Show untracked files and directories.
 -* `all` - Show also individual files in untracked directories.
 ---
 -+
 -If this variable is not specified, it defaults to 'normal'.
 -This variable can be overridden with the -u|--untracked-files option
 -of linkgit:git-status[1] and linkgit:git-commit[1].
 -
 -status.submoduleSummary::
 -      Defaults to false.
 -      If this is set to a non zero number or true (identical to -1 or an
 -      unlimited number), the submodule summary will be enabled and a
 -      summary of commits for modified submodules will be shown (see
 -      --summary-limit option of linkgit:git-submodule[1]). Please note
 -      that the summary output command will be suppressed for all
 -      submodules when `diff.ignoreSubmodules` is set to 'all' or only
 -      for those submodules where `submodule.<name>.ignore=all`. The only
 -      exception to that rule is that status and commit will show staged
 -      submodule changes. To
 -      also view the summary for ignored submodules you can either use
 -      the --ignore-submodules=dirty command-line option or the 'git
 -      submodule summary' command, which shows a similar output but does
 -      not honor these settings.
 -
 -stash.showPatch::
 -      If this is set to true, the `git stash show` command without an
 -      option will show the stash entry in patch form.  Defaults to false.
 -      See description of 'show' command in linkgit:git-stash[1].
 -
 -stash.showStat::
 -      If this is set to true, the `git stash show` command without an
 -      option will show diffstat of the stash entry.  Defaults to true.
 -      See description of 'show' command in linkgit:git-stash[1].
 -
 -include::submodule-config.txt[]
 -
 -tag.forceSignAnnotated::
 -      A boolean to specify whether annotated tags created should be GPG signed.
 -      If `--annotate` is specified on the command line, it takes
 -      precedence over this option.
 -
 -tag.sort::
 -      This variable controls the sort ordering of tags when displayed by
 -      linkgit:git-tag[1]. Without the "--sort=<value>" option provided, the
 -      value of this variable will be used as the default.
 -
 -tar.umask::
 -      This variable can be used to restrict the permission bits of
 -      tar archive entries.  The default is 0002, which turns off the
 -      world write bit.  The special value "user" indicates that the
 -      archiving user's umask will be used instead.  See umask(2) and
 -      linkgit:git-archive[1].
 -
 -transfer.fsckObjects::
 -      When `fetch.fsckObjects` or `receive.fsckObjects` are
 -      not set, the value of this variable is used instead.
 -      Defaults to false.
 -+
 -When set, the fetch or receive will abort in the case of a malformed
 -object or a link to a nonexistent object. In addition, various other
 -issues are checked for, including legacy issues (see `fsck.<msg-id>`),
 -and potential security issues like the existence of a `.GIT` directory
 -or a malicious `.gitmodules` file (see the release notes for v2.2.1
 -and v2.17.1 for details). Other sanity and security checks may be
 -added in future releases.
 -+
 -On the receiving side, failing fsckObjects will make those objects
 -unreachable, see "QUARANTINE ENVIRONMENT" in
 -linkgit:git-receive-pack[1]. On the fetch side, malformed objects will
 -instead be left unreferenced in the repository.
 -+
 -Due to the non-quarantine nature of the `fetch.fsckObjects`
 -implementation it can not be relied upon to leave the object store
 -clean like `receive.fsckObjects` can.
 -+
 -As objects are unpacked they're written to the object store, so there
 -can be cases where malicious objects get introduced even though the
 -"fetch" failed, only to have a subsequent "fetch" succeed because only
 -new incoming objects are checked, not those that have already been
 -written to the object store. That difference in behavior should not be
 -relied upon. In the future, such objects may be quarantined for
 -"fetch" as well.
 -+
 -For now, the paranoid need to find some way to emulate the quarantine
 -environment if they'd like the same protection as "push". E.g. in the
 -case of an internal mirror do the mirroring in two steps, one to fetch
 -the untrusted objects, and then do a second "push" (which will use the
 -quarantine) to another internal repo, and have internal clients
 -consume this pushed-to repository, or embargo internal fetches and
 -only allow them once a full "fsck" has run (and no new fetches have
 -happened in the meantime).
 -
 -transfer.hideRefs::
 -      String(s) `receive-pack` and `upload-pack` use to decide which
 -      refs to omit from their initial advertisements.  Use more than
 -      one definition to specify multiple prefix strings. A ref that is
 -      under the hierarchies listed in the value of this variable is
 -      excluded, and is hidden when responding to `git push` or `git
 -      fetch`.  See `receive.hideRefs` and `uploadpack.hideRefs` for
 -      program-specific versions of this config.
 -+
 -You may also include a `!` in front of the ref name to negate the entry,
 -explicitly exposing it, even if an earlier entry marked it as hidden.
 -If you have multiple hideRefs values, later entries override earlier ones
 -(and entries in more-specific config files override less-specific ones).
 -+
 -If a namespace is in use, the namespace prefix is stripped from each
 -reference before it is matched against `transfer.hiderefs` patterns.
 -For example, if `refs/heads/master` is specified in `transfer.hideRefs` and
 -the current namespace is `foo`, then `refs/namespaces/foo/refs/heads/master`
 -is omitted from the advertisements but `refs/heads/master` and
 -`refs/namespaces/bar/refs/heads/master` are still advertised as so-called
 -"have" lines. In order to match refs before stripping, add a `^` in front of
 -the ref name. If you combine `!` and `^`, `!` must be specified first.
 -+
 -Even if you hide refs, a client may still be able to steal the target
 -objects via the techniques described in the "SECURITY" section of the
 -linkgit:gitnamespaces[7] man page; it's best to keep private data in a
 -separate repository.
 -
 -transfer.unpackLimit::
 -      When `fetch.unpackLimit` or `receive.unpackLimit` are
 -      not set, the value of this variable is used instead.
 -      The default value is 100.
 -
 -uploadarchive.allowUnreachable::
 -      If true, allow clients to use `git archive --remote` to request
 -      any tree, whether reachable from the ref tips or not. See the
 -      discussion in the "SECURITY" section of
 -      linkgit:git-upload-archive[1] for more details. Defaults to
 -      `false`.
 -
 -uploadpack.hideRefs::
 -      This variable is the same as `transfer.hideRefs`, but applies
 -      only to `upload-pack` (and so affects only fetches, not pushes).
 -      An attempt to fetch a hidden ref by `git fetch` will fail.  See
 -      also `uploadpack.allowTipSHA1InWant`.
 -
 -uploadpack.allowTipSHA1InWant::
 -      When `uploadpack.hideRefs` is in effect, allow `upload-pack`
 -      to accept a fetch request that asks for an object at the tip
 -      of a hidden ref (by default, such a request is rejected).
 -      See also `uploadpack.hideRefs`.  Even if this is false, a client
 -      may be able to steal objects via the techniques described in the
 -      "SECURITY" section of the linkgit:gitnamespaces[7] man page; it's
 -      best to keep private data in a separate repository.
 -
 -uploadpack.allowReachableSHA1InWant::
 -      Allow `upload-pack` to accept a fetch request that asks for an
 -      object that is reachable from any ref tip. However, note that
 -      calculating object reachability is computationally expensive.
 -      Defaults to `false`.  Even if this is false, a client may be able
 -      to steal objects via the techniques described in the "SECURITY"
 -      section of the linkgit:gitnamespaces[7] man page; it's best to
 -      keep private data in a separate repository.
 -
 -uploadpack.allowAnySHA1InWant::
 -      Allow `upload-pack` to accept a fetch request that asks for any
 -      object at all.
 -      Defaults to `false`.
 -
 -uploadpack.keepAlive::
 -      When `upload-pack` has started `pack-objects`, there may be a
 -      quiet period while `pack-objects` prepares the pack. Normally
 -      it would output progress information, but if `--quiet` was used
 -      for the fetch, `pack-objects` will output nothing at all until
 -      the pack data begins. Some clients and networks may consider
 -      the server to be hung and give up. Setting this option instructs
 -      `upload-pack` to send an empty keepalive packet every
 -      `uploadpack.keepAlive` seconds. Setting this option to 0
 -      disables keepalive packets entirely. The default is 5 seconds.
 -
 -uploadpack.packObjectsHook::
 -      If this option is set, when `upload-pack` would run
 -      `git pack-objects` to create a packfile for a client, it will
 -      run this shell command instead.  The `pack-objects` command and
 -      arguments it _would_ have run (including the `git pack-objects`
 -      at the beginning) are appended to the shell command. The stdin
 -      and stdout of the hook are treated as if `pack-objects` itself
 -      was run. I.e., `upload-pack` will feed input intended for
 -      `pack-objects` to the hook, and expects a completed packfile on
 -      stdout.
 -+
 -Note that this configuration variable is ignored if it is seen in the
 -repository-level config (this is a safety measure against fetching from
 -untrusted repositories).
 -
 -uploadpack.allowFilter::
 -      If this option is set, `upload-pack` will support partial
 -      clone and partial fetch object filtering.
 -
 -uploadpack.allowRefInWant::
 -      If this option is set, `upload-pack` will support the `ref-in-want`
 -      feature of the protocol version 2 `fetch` command.  This feature
 -      is intended for the benefit of load-balanced servers which may
 -      not have the same view of what OIDs their refs point to due to
 -      replication delay.
 -
 -url.<base>.insteadOf::
 -      Any URL that starts with this value will be rewritten to
 -      start, instead, with <base>. In cases where some site serves a
 -      large number of repositories, and serves them with multiple
 -      access methods, and some users need to use different access
 -      methods, this feature allows people to specify any of the
 -      equivalent URLs and have Git automatically rewrite the URL to
 -      the best alternative for the particular user, even for a
 -      never-before-seen repository on the site.  When more than one
 -      insteadOf strings match a given URL, the longest match is used.
 -+
 -Note that any protocol restrictions will be applied to the rewritten
 -URL. If the rewrite changes the URL to use a custom protocol or remote
 -helper, you may need to adjust the `protocol.*.allow` config to permit
 -the request.  In particular, protocols you expect to use for submodules
 -must be set to `always` rather than the default of `user`. See the
 -description of `protocol.allow` above.
 -
 -url.<base>.pushInsteadOf::
 -      Any URL that starts with this value will not be pushed to;
 -      instead, it will be rewritten to start with <base>, and the
 -      resulting URL will be pushed to. In cases where some site serves
 -      a large number of repositories, and serves them with multiple
 -      access methods, some of which do not allow push, this feature
 -      allows people to specify a pull-only URL and have Git
 -      automatically use an appropriate URL to push, even for a
 -      never-before-seen repository on the site.  When more than one
 -      pushInsteadOf strings match a given URL, the longest match is
 -      used.  If a remote has an explicit pushurl, Git will ignore this
 -      setting for that remote.
 -
 -user.email::
 -      Your email address to be recorded in any newly created commits.
 -      Can be overridden by the `GIT_AUTHOR_EMAIL`, `GIT_COMMITTER_EMAIL`, and
 -      `EMAIL` environment variables.  See linkgit:git-commit-tree[1].
 -
 -user.name::
 -      Your full name to be recorded in any newly created commits.
 -      Can be overridden by the `GIT_AUTHOR_NAME` and `GIT_COMMITTER_NAME`
 -      environment variables.  See linkgit:git-commit-tree[1].
 -
 -user.useConfigOnly::
 -      Instruct Git to avoid trying to guess defaults for `user.email`
 -      and `user.name`, and instead retrieve the values only from the
 -      configuration. For example, if you have multiple email addresses
 -      and would like to use a different one for each repository, then
 -      with this configuration option set to `true` in the global config
 -      along with a name, Git will prompt you to set up an email before
 -      making new commits in a newly cloned repository.
 -      Defaults to `false`.
 -
 -user.signingKey::
 -      If linkgit:git-tag[1] or linkgit:git-commit[1] is not selecting the
 -      key you want it to automatically when creating a signed tag or
 -      commit, you can override the default selection with this variable.
 -      This option is passed unchanged to gpg's --local-user parameter,
 -      so you may specify a key using any method that gpg supports.
 -
 -versionsort.prereleaseSuffix (deprecated)::
 -      Deprecated alias for `versionsort.suffix`.  Ignored if
 -      `versionsort.suffix` is set.
 -
 -versionsort.suffix::
 -      Even when version sort is used in linkgit:git-tag[1], tagnames
 -      with the same base version but different suffixes are still sorted
 -      lexicographically, resulting e.g. in prerelease tags appearing
 -      after the main release (e.g. "1.0-rc1" after "1.0").  This
 -      variable can be specified to determine the sorting order of tags
 -      with different suffixes.
 -+
 -By specifying a single suffix in this variable, any tagname containing
 -that suffix will appear before the corresponding main release.  E.g. if
 -the variable is set to "-rc", then all "1.0-rcX" tags will appear before
 -"1.0".  If specified multiple times, once per suffix, then the order of
 -suffixes in the configuration will determine the sorting order of tagnames
 -with those suffixes.  E.g. if "-pre" appears before "-rc" in the
 -configuration, then all "1.0-preX" tags will be listed before any
 -"1.0-rcX" tags.  The placement of the main release tag relative to tags
 -with various suffixes can be determined by specifying the empty suffix
 -among those other suffixes.  E.g. if the suffixes "-rc", "", "-ck" and
 -"-bfs" appear in the configuration in this order, then all "v4.8-rcX" tags
 -are listed first, followed by "v4.8", then "v4.8-ckX" and finally
 -"v4.8-bfsX".
 -+
 -If more than one suffixes match the same tagname, then that tagname will
 -be sorted according to the suffix which starts at the earliest position in
 -the tagname.  If more than one different matching suffixes start at
 -that earliest position, then that tagname will be sorted according to the
 -longest of those suffixes.
 -The sorting order between different suffixes is undefined if they are
 -in multiple config files.
 -
 -web.browser::
 -      Specify a web browser that may be used by some commands.
 -      Currently only linkgit:git-instaweb[1] and linkgit:git-help[1]
 -      may use it.
 -
 -worktree.guessRemote::
 -      With `add`, if no branch argument, and neither of `-b` nor
 -      `-B` nor `--detach` are given, the command defaults to
 -      creating a new branch from HEAD.  If `worktree.guessRemote` is
 -      set to true, `worktree add` tries to find a remote-tracking
 -      branch whose name uniquely matches the new branch name.  If
 -      such a branch exists, it is checked out and set as "upstream"
 -      for the new branch.  If no such match can be found, it falls
 -      back to creating a new branch from the current HEAD.
 +include::config/mailinfo.txt[]
 +
 +include::config/mailmap.txt[]
 +
 +include::config/man.txt[]
 +
 +include::config/merge.txt[]
 +
 +include::config/mergetool.txt[]
 +
 +include::config/notes.txt[]
 +
 +include::config/pack.txt[]
 +
 +include::config/pager.txt[]
 +
 +include::config/pretty.txt[]
 +
 +include::config/protocol.txt[]
 +
 +include::config/pull.txt[]
 +
 +include::config/push.txt[]
 +
 +include::config/rebase.txt[]
 +
 +include::config/receive.txt[]
 +
 +include::config/remote.txt[]
 +
 +include::config/remotes.txt[]
 +
 +include::config/repack.txt[]
 +
 +include::config/rerere.txt[]
 +
 +include::config/reset.txt[]
 +
 +include::config/sendemail.txt[]
 +
 +include::config/sequencer.txt[]
 +
 +include::config/showbranch.txt[]
 +
 +include::config/splitindex.txt[]
 +
 +include::config/ssh.txt[]
 +
 +include::config/status.txt[]
 +
 +include::config/stash.txt[]
 +
 +include::config/submodule.txt[]
 +
 +include::config/tag.txt[]
 +
 +include::config/transfer.txt[]
 +
 +include::config/uploadarchive.txt[]
 +
 +include::config/uploadpack.txt[]
 +
 +include::config/url.txt[]
 +
 +include::config/user.txt[]
 +
 +include::config/versionsort.txt[]
 +
 +include::config/web.txt[]
 +
 +include::config/worktree.txt[]
Simple merge
diff --cc cache.h
Simple merge