Merge branch 'as/config-doc-markup-fix'
authorJunio C Hamano <gitster@pobox.com>
Thu, 17 Sep 2015 19:29:01 +0000 (12:29 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 17 Sep 2015 19:29:01 +0000 (12:29 -0700)
* as/config-doc-markup-fix:
Documentation/config: fix formatting for branch.*.rebase and pull.rebase

1  2 
Documentation/config.txt
diff --combined Documentation/config.txt
index 0c351b9bcf77e872e0cca6da2ffc43db136d27a7,0ed61d7e5eaf467fc39b4a51f39bec7c09bcbcfc..0cc87a6f6565bbe794420bc47be8407e4ac47f22
@@@ -14,8 -14,7 +14,8 @@@ the fully qualified variable name of th
  dot-separated segment and the section name is everything before the last
  dot. The variable names are case-insensitive, allow only alphanumeric
  characters and `-`, and must start with an alphabetic character.  Some
 -variables may appear multiple times.
 +variables may appear multiple times; we say then that the variable is
 +multivalued.
  
  Syntax
  ~~~~~~
@@@ -26,7 -25,7 +26,7 @@@ blank lines are ignored
  
  The file consists of sections and variables.  A section begins with
  the name of the section in square brackets and continues until the next
 -section begins.  Section names are not case sensitive.  Only alphanumeric
 +section begins.  Section names are case-insensitive.  Only alphanumeric
  characters, `-` and `.` are allowed in section names.  Each variable
  must belong to some section, which means that there must be a section
  header before the first setting of a variable.
@@@ -41,8 -40,8 +41,8 @@@ in the section header, like in the exam
  --------
  
  Subsection names are case sensitive and can contain any characters except
 -newline (doublequote `"` and backslash have to be escaped as `\"` and `\\`,
 -respectively).  Section headers cannot span multiple
 +newline (doublequote `"` and backslash can be included by escaping them
 +as `\"` and `\\`, respectively).  Section headers cannot span multiple
  lines.  Variables may belong directly to a section or to a given subsection.
  You can have `[section]` if you have `[section "subsection"]`, but you
  don't need to.
@@@ -54,27 -53,38 +54,27 @@@ restrictions as section names
  
  All the other lines (and the remainder of the line after the section
  header) are recognized as setting variables, in the form
 -'name = value'.  If there is no equal sign on the line, the entire line
 -is taken as 'name' and the variable is recognized as boolean "true".
 +'name = value' (or just 'name', which is a short-hand to say that
 +the variable is the boolean "true").
  The variable names are case-insensitive, allow only alphanumeric characters
 -and `-`, and must start with an alphabetic character.  There can be more
 -than one value for a given variable; we say then that the variable is
 -multivalued.
 -
 -Leading and trailing whitespace in a variable value is discarded.
 -Internal whitespace within a variable value is retained verbatim.
 +and `-`, and must start with an alphabetic character.
  
 -The values following the equals sign in variable assign are all either
 -a string, an integer, or a boolean.  Boolean values may be given as yes/no,
 -1/0, true/false or on/off.  Case is not significant in boolean values, when
 -converting value to the canonical form using '--bool' type specifier;
 -'git config' will ensure that the output is "true" or "false".
 +A line that defines a value can be continued to the next line by
 +ending it with a `\`; the backquote and the end-of-line are
 +stripped.  Leading whitespaces after 'name =', the remainder of the
 +line after the first comment character '#' or ';', and trailing
 +whitespaces of the line are discarded unless they are enclosed in
 +double quotes.  Internal whitespaces within the value are retained
 +verbatim.
  
 -String values may be entirely or partially enclosed in double quotes.
 -You need to enclose variable values in double quotes if you want to
 -preserve leading or trailing whitespace, or if the variable value contains
 -comment characters (i.e. it contains '#' or ';').
 -Double quote `"` and backslash `\` characters in variable values must
 -be escaped: use `\"` for `"` and `\\` for `\`.
 +Inside double quotes, double quote `"` and backslash `\` characters
 +must be escaped: use `\"` for `"` and `\\` for `\`.
  
  The following escape sequences (beside `\"` and `\\`) are recognized:
  `\n` for newline character (NL), `\t` for horizontal tabulation (HT, TAB)
 -and `\b` for backspace (BS).  No other char escape sequence, nor octal
 -char sequences are valid.
 +and `\b` for backspace (BS).  Other char escape sequences (including octal
 +escape sequences) are invalid.
  
 -Variable values ending in a `\` are continued on the next line in the
 -customary UNIX fashion.
 -
 -Some variables may require a special value format.
  
  Includes
  ~~~~~~~~
@@@ -116,72 -126,13 +116,72 @@@ Exampl
                path = foo ; expand "foo" relative to the current file
                path = ~/foo ; expand "foo" in your $HOME directory
  
 +
 +Values
 +~~~~~~
 +
 +Values of many variables are treated as a simple string, but there
 +are variables that take values of specific types and there are rules
 +as to how to spell them.
 +
 +boolean::
 +
 +       When a variable is said to take a boolean value, many
 +       synonyms are accepted for 'true' and 'false'; these are all
 +       case-insensitive.
 +
 +       true;; Boolean true can be spelled as `yes`, `on`, `true`,
 +              or `1`.  Also, a variable defined without `= <value>`
 +              is taken as true.
 +
 +       false;; Boolean false can be spelled as `no`, `off`,
 +              `false`, or `0`.
 ++
 +When converting value to the canonical form using '--bool' type
 +specifier; 'git config' will ensure that the output is "true" or
 +"false" (spelled in lowercase).
 +
 +integer::
 +       The value for many variables that specify various sizes can
 +       be suffixed with `k`, `M`,... to mean "scale the number by
 +       1024", "by 1024x1024", etc.
 +
 +color::
 +       The value for a variables that takes a color is a list of
 +       colors (at most two) and attributes (at most one), separated
 +       by spaces.  The colors accepted are `normal`, `black`,
 +       `red`, `green`, `yellow`, `blue`, `magenta`, `cyan` and
 +       `white`; the attributes are `bold`, `dim`, `ul`, `blink` and
 +       `reverse`.  The first color given is the foreground; the
 +       second is the background.  The position of the attribute, if
 +       any, doesn't matter. Attributes may be turned off specifically
 +       by prefixing them with `no` (e.g., `noreverse`, `noul`, etc).
 ++
 +Colors (foreground and background) may also be given as numbers between
 +0 and 255; these use ANSI 256-color mode (but note that not all
 +terminals may support this).  If your terminal supports it, you may also
 +specify 24-bit RGB values as hex, like `#ff0ab3`.
 ++
 +The attributes are meant to be reset at the beginning of each item
 +in the colored output, so setting color.decorate.branch to `black`
 +will paint that branch name in a plain `black`, even if the previous
 +thing on the same output line (e.g. opening parenthesis before the
 +list of branch names in `log --decorate` output) is set to be
 +painted with `bold` or some other attribute.
 +
 +
  Variables
  ~~~~~~~~~
  
  Note that this list is non-comprehensive and not necessarily complete.
  For command-specific variables, you will find a more detailed description
 -in the appropriate manual page. You will find a description of non-core
 -porcelain configuration variables in the respective porcelain documentation.
 +in the appropriate manual page.
 +
 +Other git-related tools may and do use their own variables.  When
 +inventing new variables for use in your own tool, make sure their
 +names do not conflict with those that are used by Git itself and
 +other popular tools, and describe them in your documentation.
 +
  
  advice.*::
        These variables control various optional help messages designed to
  --
        pushUpdateRejected::
                Set this variable to 'false' if you want to disable
 -              'pushNonFFCurrent', 'pushNonFFDefault',
 +              '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.
 -      pushNonFFDefault::
 -              Advice to set 'push.default' to 'upstream' or 'current'
 -              when you ran linkgit:git-push[1] and pushed 'matching
 -              refs' by default (i.e. you did not provide an explicit
 -              refspec, and no 'push.default' configuration was set)
 -              and it resulted in a non-fast-forward error.
        pushNonFFMatching::
                Advice shown when you ran linkgit:git-push[1] and pushed
                'matching refs' explicitly (i.e. you used ':', or
        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 committish, or make the remote
 -              ref point at an object that is not a committish.
 +              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
  --
  
  core.fileMode::
 -      If false, the executable bit differences between the index and
 -      the working tree are ignored; useful on broken filesystems like FAT.
 -      See linkgit:git-update-index[1].
 +      Tells Git if the executable bit of files in the working tree
 +      is to be honored.
  +
 -The default is true, except linkgit:git-clone[1] or linkgit:git-init[1]
 -will probe and set core.fileMode false if appropriate when the
 -repository is created.
 +Some filesystems lose the executable bit when a file that is
 +marked as executable is checked out, or checks out an
 +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.ignorecase::
 +core.ignoreCase::
        If true, this option enables various workarounds to enable
        Git to work better on filesystems that are not case sensitive,
        like FAT. For example, if a directory listing finds
        "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
 +will probe and set core.ignoreCase true if appropriate when the repository
  is created.
  
 -core.precomposeunicode::
 +core.precomposeUnicode::
        This option is only used by Mac OS implementation of Git.
 -      When core.precomposeunicode=true, Git reverts the unicode decomposition
 +      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.trustctime::
        If false, the ctime differences between the index and the
        working tree are ignored; useful when the inode change time
        crawlers and some backup systems).
        See linkgit:git-update-index[1]. True by default.
  
 -core.checkstat::
 +core.checkStat::
        Determines which stat fields to match between the index
        and work tree. The user can set this to 'default' or
        'minimal'. Default (or explicitly 'default'), is to check
        all fields, including the sub-second part of mtime and ctime.
  
 -core.quotepath::
 +core.quotePath::
        The commands that output paths (e.g. 'ls-files',
        'diff'), when not given the `-z` option, will quote
        "unusual" characters in the pathname by enclosing the
@@@ -419,19 -352,14 +419,19 @@@ This is useful for excluding servers in
  proxy use, while defaulting to a common proxy for external domains.
  
  core.ignoreStat::
 -      If true, commands which modify both the working tree and the index
 -      will mark the updated paths with the "assume unchanged" bit in the
 -      index. These marked files are then assumed to stay unchanged in the
 -      working tree, until you mark them otherwise manually - Git will not
 -      detect the file changes by lstat() calls. This is useful on systems
 -      where those are very slow, such as Microsoft Windows.
 -      See linkgit:git-update-index[1].
 -      False by default.
 +      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
@@@ -453,10 -381,8 +453,10 @@@ false), while all other repositories ar
  
  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.
 +      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.
@@@ -520,9 -446,9 +520,9 @@@ core.compression:
        -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'.
 +      such as 'core.looseCompression' and 'pack.compression'.
  
 -core.loosecompression::
 +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
@@@ -564,7 -490,7 +564,7 @@@ core.deltaBaseCacheLimit:
        to avoid unpacking and decompressing frequently used base
        objects multiple times.
  +
 -Default is 16 MiB on all platforms.  This should be reasonable
 +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.
  +
@@@ -574,8 -500,7 +574,8 @@@ 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.
 +      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
@@@ -583,7 -508,7 +583,7 @@@ be delta compressed, but larger binary 
  +
  Common unit suffixes of 'k', 'm', or 'g' are supported.
  
 -core.excludesfile::
 +core.excludesFile::
        In addition to '.gitignore' (per-directory) and
        '.git/info/exclude', Git looks into this file for patterns
        of files which are not meant to be tracked.  "`~/`" is expanded
        If $XDG_CONFIG_HOME is either not set or empty, $HOME/.config/git/ignore
        is used instead. See linkgit:gitignore[5].
  
 -core.askpass::
 +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.
 +      command-line argument and write the password on its STDOUT.
  
 -core.attributesfile::
 +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
 +      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.
  
@@@ -615,20 -540,11 +615,20 @@@ core.editor:
        variable when it is set, and the environment variable
        `GIT_EDITOR` is not set.  See linkgit:git-var[1].
  
 -core.commentchar::
 +core.commentChar::
        Commands such as `commit` and `tag` that lets 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.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).
  
  sequence.editor::
        Text editor used by `git rebase -i` for editing the rebase instruction file.
        When not configured the default commit message editor is used instead.
  
  core.pager::
 -      The command that Git will use to paginate output.  Can
 -      be overridden with the `GIT_PAGER` environment
 -      variable.  Note that Git sets the `LESS` environment
 -      variable to `FRSX` if it is unset when it runs the
 -      pager.  One can change these settings by setting the
 -      `LESS` variable to some other value.  Alternately,
 -      these settings can be overridden on a project or
 -      global basis by setting the `core.pager` option.
 -      Setting `core.pager` has no effect on the `LESS`
 -      environment variable behaviour above, so if you want
 -      to override Git's default settings this way, you need
 -      to be explicit.  For example, to disable the S option
 -      in a backward compatible manner, set `core.pager`
 -      to `less -+S`.  This will be passed to the shell by
 -      Git, which will translate the final command to
 -      `LESS=FRSX less -+S`.
 +      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
    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::
 +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
@@@ -698,14 -607,14 +698,14 @@@ data writes properly, but can be usefu
  journalling (traditional UNIX filesystems) or that only journal metadata
  and not file contents (OS X's HFS+, or Linux ext3 with "data=writeback").
  
 -core.preloadindex::
 +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.  With this set to 'true', Git will do the
 +relatively high IO latencies.  When enabled, Git will do the
  index comparison to the filesystem data in parallel, allowing
 -overlapping IO's.
 +overlapping IO's.  Defaults to true.
  
  core.createObject::
        You can set this to 'link', in which case a hardlink followed by
@@@ -735,13 -644,14 +735,13 @@@ core.abbrev:
        for abbreviated object names to stay unique for sufficiently long
        time.
  
 -add.ignore-errors::
  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].  Older versions of Git accept only
 -      `add.ignore-errors`, which does not follow the usual naming
 -      convention for configuration variables.  Newer versions of Git
 -      honor `add.ignoreErrors` as well.
 +      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.
        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.
 -      quote pair and a backslash can be used to quote them.
 +      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
@@@ -769,15 -679,7 +769,15 @@@ am.keepcr:
        by giving '--no-keep-cr' from the command line.
        See linkgit:git-am[1], linkgit:git-mailsplit[1].
  
 -apply.ignorewhitespace::
 +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.
@@@ -789,7 -691,7 +789,7 @@@ apply.whitespace:
        Tells 'git apply' how to handle whitespaces, in the same way
        as the '--whitespace' option. See linkgit:git-apply[1].
  
 -branch.autosetupmerge::
 +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,
        local branch or remote-tracking
        branch. This option defaults to true.
  
 -branch.autosetuprebase::
 +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").
        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
 +      See "branch.autoSetupMerge" for details on how to set up a
        branch to track another branch.
        This option defaults to never.
  
  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).
 +      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
 +      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.
 +      `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::
 +branch.<name>.pushRemote::
        When on branch <name>, it overrides `branch.<name>.remote` for
 -      pushing.  It also overrides `remote.pushdefault` for pushing
 +      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
 +      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.
  
@@@ -851,10 -751,10 +851,10 @@@ branch.<name>.merge:
        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 special setting
 -      `.` (a period) for branch.<name>.remote.
 +      branch.<name>.merge to the desired branch, and use the relative path
 +      setting `.` (a period) for branch.<name>.remote.
  
 -branch.<name>.mergeoptions::
 +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
@@@ -866,9 -766,9 +866,9 @@@ branch.<name>.rebase:
        "git pull" is run. See "pull.rebase" for doing this in a non
        branch-specific manner.
  +
      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 preserve, also pass `--preserve-merges` along to 'git rebase'
+ so that locally committed merge commits will not be flattened
+ by running 'git pull'.
  +
  *NOTE*: this is a possibly dangerous operation; do *not* use
  it unless you understand the implications (see linkgit:git-rebase[1]
@@@ -891,8 -791,8 +891,8 @@@ browser.<tool>.path:
        working repository in gitweb (see linkgit:git-instaweb[1]).
  
  clean.requireForce::
 -      A boolean to make git-clean do nothing unless given -f
 -      or -n.   Defaults to true.
 +      A boolean to make git-clean do nothing unless given -f,
 +      -i or -n.   Defaults to true.
  
  color.branch::
        A boolean to enable/disable color in the output of
@@@ -906,6 -806,14 +906,6 @@@ color.branch.<slot>:
        `remote` (a remote-tracking branch in refs/remotes/),
        `upstream` (upstream tracking branch), `plain` (other
        refs).
 -+
 -The value for these configuration variables is a list of colors (at most
 -two) and attributes (at most one), separated by spaces.  The colors
 -accepted are `normal`, `black`, `red`, `green`, `yellow`, `blue`,
 -`magenta`, `cyan` and `white`; the attributes are `bold`, `dim`, `ul`,
 -`blink` and `reverse`.  The first color given is the foreground; the
 -second is the background.  The position of the attribute, if any,
 -doesn't matter.
  
  color.diff::
        Whether to use ANSI escape sequences to add color to patches.
        commands will only use color when output is to the terminal.
        Defaults to false.
  +
 -This does not affect linkgit:git-format-patch[1] nor the
 +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 `plain` (context text), `meta` (metainformation), `frag`
 +      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), or `whitespace`
 -      (highlighting whitespace errors). The values of these variables may be
 -      specified as in color.branch.<slot>.
 +      (highlighting whitespace errors).
  
  color.decorate.<slot>::
        Use customized color for 'git log --decorate' output.  `<slot>` is one
@@@ -952,17 -860,15 +952,17 @@@ color.grep.<slot>:
  `linenumber`;;
        line number prefix (when using `-n`)
  `match`;;
 -      matching text
 +      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 (`--`)
  --
 -+
 -The values of these variables may be specified as in color.branch.<slot>.
  
  color.interactive::
        When set to `always`, always use colors for interactive prompts
@@@ -975,13 -881,14 +975,13 @@@ 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.  The values of these variables may be
 -      specified as in color.branch.<slot>.
 +      interactive commands.
  
  color.pager::
        A boolean to enable/disable colored output when the pager is in
        use (default is true).
  
 -color.showbranch::
 +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
@@@ -999,10 -906,10 +999,10 @@@ color.status.<slot>:
        `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), or
 +      `branch` (the current branch),
        `nobranch` (the color the 'no branch' warning is shown in, defaulting
 -      to red). The values of these variables may be specified as in
 -      color.branch.<slot>.
 +      to red), or
 +      `unmerged` (files which have unmerged changes).
  
  color.ui::
        This variable determines the default value for variables such
@@@ -1081,14 -988,6 +1081,14 @@@ commit.cleanup:
        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
@@@ -1166,10 -1065,6 +1166,10 @@@ fetch.unpackLimit:
        especially on slow filesystems.  If not set, the value of
        `transfer.unpackLimit` is used instead.
  
 +fetch.prune::
 +      If true, fetch will automatically behave as if the `--prune`
 +      option was given on the command line.  See also `remote.<name>.prune`.
 +
  format.attach::
        Enable multipart/mixed attachments as the default for
        'format-patch'.  The value can also be a double quoted string
@@@ -1194,7 -1089,7 +1194,7 @@@ format.cc:
        by mail.  See the --to and --cc options in
        linkgit:git-format-patch[1].
  
 -format.subjectprefix::
 +format.subjectPrefix::
        The default for format-patch is to output files with the '[PATCH]'
        subject prefix. Use this variable to change that prefix.
  
@@@ -1204,10 -1099,6 +1204,10 @@@ format.signature:
        Set this variable to the empty string ("") to suppress
        signature generation.
  
 +format.signatureFile::
 +      Works just like format.signature except the contents of the
 +      file specified by this variable will be used as the signature.
 +
  format.suffix::
        The default for format-patch is to output files with the suffix
        `.patch`. Use this variable to change that suffix (make sure to
@@@ -1228,7 -1119,7 +1228,7 @@@ format.thread:
        A true boolean value is the same as `shallow`, and a false
        value disables threading.
  
 -format.signoff::
 +format.signOff::
        A boolean value which lets you enable the `-s/--signoff` option of
        format-patch by default. *Note:* Adding the Signed-off-by: line to a
        patch should be a conscious act and means that you certify you have
@@@ -1250,30 -1141,6 +1250,30 @@@ filter.<driver>.smudge:
        object to a worktree file upon checkout.  See
        linkgit:gitattributes[5] for details.
  
 +fsck.<msg-id>::
 +      Allows overriding the message type (error, warn or ignore) of a
 +      specific message ID such as `missingEmail`.
 ++
 +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.
 ++
 +This feature is intended to support working with legacy repositories
 +which cannot be repaired without disruptive changes.
 +
 +fsck.skipList::
 +      The path to a sorted list of object names (i.e. one SHA-1 per
 +      line) that are known to be broken in a non-fatal way and should
 +      be ignored. 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.
 +
 +gc.aggressiveDepth::
 +      The depth parameter used in the delta compression
 +      algorithm used by 'git gc --aggressive'.  This defaults
 +      to 250.
 +
  gc.aggressiveWindow::
        The window size parameter used in the delta compression
        algorithm used by 'git gc --aggressive'.  This defaults
@@@ -1286,17 -1153,13 +1286,17 @@@ gc.auto:
        light-weight garbage collection from time to time.  The
        default value is 6700.  Setting this to 0 disables it.
  
 -gc.autopacklimit::
 +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.packrefs::
 +gc.autoDetach::
 +      Make `git gc --auto` return immediately and run in background
 +      if the system supports it. Default is true.
 +
 +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
        to enable it within all non-bare repos or it can be set to a
        boolean value.  The default is `true`.
  
 -gc.pruneexpire::
 +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.
 -
 -gc.reflogexpire::
 -gc.<pattern>.reflogexpire::
 +      "now" may be used to disable this grace period and always prune
 +      unreachable objects immediately, or "never" may be used to
 +      suppress pruning.
 +
 +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.  With "<pattern>" (e.g.
 +      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.<ref>.reflogexpireunreachable::
 +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.  With "<pattern>" (e.g. "refs/stash")
 +      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::
 +gc.rerereResolved::
        Records of conflicted merge you resolved earlier are
        kept for this many days when 'git rerere gc' is run.
        The default is 60 days.  See linkgit:git-rerere[1].
  
 -gc.rerereunresolved::
 +gc.rerereUnresolved::
        Records of conflicted merge you have not resolved are
        kept for this many days when 'git rerere gc' is run.
        The default is 15 days.  See linkgit:git-rerere[1].
  
 -gitcvs.commitmsgannotation::
 +gitcvs.commitMsgAnnotation::
        Append this string to each commit message. Set to empty string
        to disable this feature. Defaults to "via git-CVS emulator".
  
@@@ -1356,7 -1206,7 +1356,7 @@@ gitcvs.enabled:
        Whether the CVS server interface is enabled for this repository.
        See linkgit:git-cvsserver[1].
  
 -gitcvs.logfile::
 +gitcvs.logFile::
        Path to a log file where the CVS server interface well... logs
        various stuff. See linkgit:git-cvsserver[1].
  
@@@ -1368,10 -1218,10 +1368,10 @@@ gitcvs.usecrlfattr:
        treat it as text. If they suppress text conversion, the file
        will be set with '-kb' mode, which suppresses any newline munging
        the client might otherwise do. If the attributes do not allow
 -      the file type to be determined, then 'gitcvs.allbinary' is
 +      the file type to be determined, then 'gitcvs.allBinary' is
        used. See linkgit:gitattributes[5].
  
 -gitcvs.allbinary::
 +gitcvs.allBinary::
        This is used if 'gitcvs.usecrlfattr' does not resolve
        the correct '-kb' mode to use. If true, all
        unresolved files are sent to the client in
        then the contents of the file are examined to decide if
        it is binary, similar to 'core.autocrlf'.
  
 -gitcvs.dbname::
 +gitcvs.dbName::
        Database used by git-cvsserver to cache revision information
        derived from the Git repository. The exact meaning depends on the
        used database driver, for SQLite (which is the default driver) this
        linkgit:git-cvsserver[1] for details). May not contain semicolons (`;`).
        Default: '%Ggitcvs.%m.sqlite'
  
 -gitcvs.dbdriver::
 +gitcvs.dbDriver::
        Used Perl DBI driver. You can specify any available driver
        for this here, but it might not work. git-cvsserver is tested
        with 'DBD::SQLite', reported to work with 'DBD::Pg', and
        May not contain double colons (`:`). Default: 'SQLite'.
        See linkgit:git-cvsserver[1].
  
 -gitcvs.dbuser, gitcvs.dbpass::
 -      Database user and password. Only useful if setting 'gitcvs.dbdriver',
 +gitcvs.dbUser, gitcvs.dbPass::
 +      Database user and password. Only useful if setting 'gitcvs.dbDriver',
        since SQLite has no concept of database users and/or passwords.
 -      'gitcvs.dbuser' supports variable substitution (see
 +      'gitcvs.dbUser' supports variable substitution (see
        linkgit:git-cvsserver[1] for details).
  
  gitcvs.dbTableNamePrefix::
        characters will be replaced with underscores.
  
  All gitcvs variables except for 'gitcvs.usecrlfattr' and
 -'gitcvs.allbinary' can also be specified as
 +'gitcvs.allBinary' can also be specified as
  'gitcvs.<access_method>.<varname>' (where 'access_method'
  is one of "ext" and "pserver") to make them apply only for the given
  access method.
@@@ -1429,7 -1279,7 +1429,7 @@@ gitweb.highlight:
  gitweb.patches::
  gitweb.pickaxe::
  gitweb.remote_heads::
 -gitweb.showsizes::
 +gitweb.showSizes::
  gitweb.snapshot::
        See linkgit:gitweb.conf[5] for description.
  
@@@ -1450,26 -1300,22 +1450,26 @@@ grep.extendedRegexp:
  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
 +      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
 +      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.
  
 -gui.commitmsgwidth::
 +gui.commitMsgWidth::
        Defines how wide the commit message window is in the
        linkgit:git-gui[1]. "75" is the default.
  
 -gui.diffcontext::
 +gui.diffContext::
        Specifies how many context lines should be used in calls to diff
        made by the linkgit:git-gui[1]. The default is "5".
  
 +gui.displayUntracked::
 +      Determines if linkgit::git-gui[1] shows untracked files
 +      in the file list. The default is "true".
 +
  gui.encoding::
        Specifies the default encoding to use for displaying of
        file contents in linkgit:git-gui[1] and linkgit:gitk[1].
        If this option is not set, the tools default to the
        locale encoding.
  
 -gui.matchtrackingbranch::
 +gui.matchTrackingBranch::
        Determines if new branches created with linkgit:git-gui[1] should
        default to tracking remote branches with matching names or
        not. Default: "false".
  
 -gui.newbranchtemplate::
 +gui.newBranchTemplate::
        Is used as suggested name when creating new branches using the
        linkgit:git-gui[1].
  
 -gui.pruneduringfetch::
 +gui.pruneDuringFetch::
        "true" if linkgit:git-gui[1] should prune remote-tracking branches when
        performing a fetch. The default value is "false".
  
@@@ -1495,17 -1341,17 +1495,17 @@@ gui.trustmtime:
        Determines if linkgit:git-gui[1] should trust the file modification
        timestamp or not. By default the timestamps are not trusted.
  
 -gui.spellingdictionary::
 +gui.spellingDictionary::
        Specifies the dictionary used for spell checking commit messages in
        the linkgit:git-gui[1]. When set to "none" spell checking is turned
        off.
  
 -gui.fastcopyblame::
 +gui.fastCopyBlame::
        If true, 'git gui blame' uses `-C` instead of `-C -C` for original
        location detection. It makes blame significantly faster on huge
        repositories at the expense of less thorough copy detection.
  
 -gui.copyblamethreshold::
 +gui.copyBlameThreshold::
        Specifies the threshold to use in 'git gui blame' original location
        detection, measured in alphanumeric characters. See the
        linkgit:git-blame[1] manual for more information on copy detection.
@@@ -1525,22 -1371,22 +1525,22 @@@ guitool.<name>.cmd:
        'FILENAME', and the name of the current branch as 'CUR_BRANCH' (if
        the head is detached, 'CUR_BRANCH' is empty).
  
 -guitool.<name>.needsfile::
 +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::
 +guitool.<name>.noConsole::
        Run the command silently, without creating a window to display its
        output.
  
 -guitool.<name>.norescan::
 +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::
 +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
        the dialog uses a built-in generic prompt; otherwise the exact
        value of the variable is used.
  
 -guitool.<name>.revprompt::
 +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.
 +      is similar to 'argPrompt', and can be used together with it.
  
 -guitool.<name>.revunmerged::
 -      Show only unmerged branches in the 'revprompt' subdialog.
 +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.
  
@@@ -1564,7 -1410,7 +1564,7 @@@ guitool.<name>.title:
  
  guitool.<name>.prompt::
        Specifies the general prompt string to display at the top of
 -      the dialog, before subsections for 'argprompt' and 'revprompt'.
 +      the dialog, before subsections for 'argPrompt' and 'revPrompt'.
        The default value includes the actual command.
  
  help.browser::
@@@ -1576,7 -1422,7 +1576,7 @@@ help.format:
        Values 'man', 'info', 'web' and 'html' are supported. 'man' is
        the default. 'web' and 'html' are the same.
  
 -help.autocorrect::
 +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
        value is 0 - the command will be just shown but not executed.
        This is the default.
  
 -help.htmlpath::
 +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
@@@ -1597,53 -1443,13 +1597,53 @@@ http.proxy:
        `curl(1)`).  This can be overridden on a per-remote basis; see
        remote.<name>.proxy
  
 -http.cookiefile::
 +http.cookieFile::
        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 linkgit:curl[1]).
 -      NOTE that the file specified with http.cookiefile is only used as
 -      input. No cookies will be stored in the file.
 +      NOTE that the file specified with http.cookieFile is only used 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
 +
 ++
 +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
@@@ -1714,7 -1520,7 +1714,7 @@@ http.noEPSV:
        support EPSV mode. Can be overridden by the 'GIT_CURL_FTP_NO_EPSV'
        environment variable. Default is false (curl will use EPSV).
  
 -http.useragent::
 +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
        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.<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 exactly between the config key and the URL.
 +
 +. 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.
 +
  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
@@@ -1783,11 -1544,7 +1783,11 @@@ imap:
        The configuration variables in the 'imap' section are described
        in linkgit:git-imap-send[1].
  
 -init.templatedir::
 +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].)
  
@@@ -1803,7 -1560,7 +1803,7 @@@ 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::
 +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.
@@@ -1812,14 -1569,14 +1812,14 @@@ instaweb.port:
        The port number to bind the gitweb httpd to. See
        linkgit:git-instaweb[1].
  
 -interactive.singlekey::
 +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.
 +      is not available; requires the Perl module Term::ReadKey.
  
  log.abbrevCommit::
        If true, makes linkgit:git-log[1], linkgit:git-show[1], and
@@@ -1840,7 -1597,7 +1840,7 @@@ log.decorate:
        specified, the full ref name (including prefix) will be printed.
        This is the same as the log commands '--decorate' option.
  
 -log.showroot::
 +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
@@@ -1850,13 -1607,6 +1850,13 @@@ 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
@@@ -1911,15 -1661,6 +1911,15 @@@ mergetool.<tool>.trustExitCode:
        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
@@@ -1933,27 -1674,9 +1933,27 @@@ mergetool.keepTemporaries:
        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
@@@ -1982,8 -1705,8 +1982,8 @@@ 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`, or `ignore`.  Defaults to
 -      `concatenate`.
 +      `overwrite`, `concatenate`, `cat_sort_uniq`, or `ignore`.
 +      Defaults to `concatenate`.
  +
  This setting can be overridden with the `GIT_NOTES_REWRITE_MODE`
  environment variable.
@@@ -2011,11 -1734,10 +2011,11 @@@ pack.depth:
        maximum depth is given on the command line. Defaults to 50.
  
  pack.windowMemory::
 -      The window memory size limit used by linkgit:git-pack-objects[1]
 -      when no limit is given on the command line.  The value can be
 -      suffixed with "k", "m", or "g".  Defaults to 0, meaning no
 -      limit.
 +      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
@@@ -2083,26 -1805,6 +2083,26 @@@ pack.packSizeLimit:
        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.
@@@ -2122,25 -1824,15 +2122,25 @@@ pretty.<name>:
        Note that an alias with the same name as a built-in format
        will be silently ignored.
  
 +pull.ff::
 +      By default, Git does not create an extra merge commit when merging
 +      a commit that is a descendant of the current commit. Instead, the
 +      tip of the current branch is fast-forwarded. When set to `false`,
 +      this variable tells Git to create an extra merge commit in such
 +      a case (equivalent to giving the `--no-ff` option from the command
 +      line). When set to `only`, only such fast-forward merges are
 +      allowed (equivalent to giving the `--ff-only` option from the
 +      command line). This setting overrides `merge.ff` when pulling.
 +
  pull.rebase::
        When true, rebase branches on top of the fetched branch, instead
        of merging the default branch from the default remote when "git
        pull" is run. See "branch.<name>.rebase" for setting this on a
        per-branch basis.
  +
      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 preserve, also pass `--preserve-merges` along to 'git rebase'
+ so that locally committed merge commits will not be flattened
+ by running 'git pull'.
  +
  *NOTE*: this is a possibly dangerous operation; do *not* use
  it unless you understand the implications (see linkgit:git-rebase[1]
@@@ -2184,7 -1876,7 +2184,7 @@@ When pushing to a remote that is differ
  pull from, work as `current`.  This is the safest option and is suited
  for beginners.
  +
 -This mode will become the default in Git 2.0.
 +This mode has become the default in Git 2.0.
  
  * `matching` - push all branches having the same name on both ends.
    This makes the repository you are pushing to remember the set of
@@@ -2203,33 -1895,19 +2203,33 @@@ suitable for pushing into a shared cent
  people may add new branches there, or update the tip of existing
  branches outside your control.
  +
 -This is currently the default, but Git 2.0 will change the default
 -to `simple`.
 +This used to be the default, but not since Git 2.0 (`simple` is the
 +new default).
  
  --
  
 +push.followTags::
 +      If set to true enable '--follow-tags' option by default.  You
 +      may override this configuration at time of push by specifying
 +      '--no-follow-tags'.
 +
 +push.gpgSign::
 +      May be set to a boolean value, or the string 'if-asked'. A true
 +      value causes all pushes to be GPG signed, as if '--signed' is
 +      passed to linkgit:git-push[1]. The string 'if-asked' causes
 +      pushes to be signed if the server supports it, as if
 +      '--signed=if-asked' is passed to 'git push'. A false value may
 +      override a value from a lower-priority config file. An explicit
 +      command-line flag always overrides this config option.
 +
  rebase.stat::
        Whether to show a diffstat of what changed upstream since the last
        rebase. False by default.
  
 -rebase.autosquash::
 +rebase.autoSquash::
        If set to true enable '--autosquash' option by default.
  
 -rebase.autostash::
 +rebase.autoStash::
        When set to true, automatically create a temporary stash
        before the operation begins, and apply it after the operation
        ends.  This means that you can run rebase on a dirty worktree.
        successful rebase might result in non-trivial conflicts.
        Defaults to false.
  
 +rebase.missingCommitsCheck::
 +      If set to "warn", git rebase -i will print a warning if some
 +      commits are removed (e.g. a line was deleted), however the
 +      rebase will still proceed. If set to "error", it will print
 +      the previous warning and stop the rebase, 'git rebase
 +      --edit-todo' can then be used to correct the error. If set to
 +      "ignore", no checking is done.
 +      To drop a commit without warning or error, use the `drop`
 +      command in the todo-list.
 +      Defaults to "ignore".
 +
 +rebase.instructionFormat
 +      A format string, as specified in linkgit:git-log[1], to be used for
 +      the instruction list during an interactive rebase.  The format will automatically
 +      have the long commit hash prepended to the format.
 +
 +receive.advertiseAtomic::
 +      By default, git-receive-pack will advertise the atomic push
 +      capability to its clients. If you don't want to this capability
 +      to be advertised, set this variable to false.
 +
  receive.autogc::
        By default, git-receive-pack will run "git-gc --auto" after
        receiving data from git-push and updating refs.  You can stop
        it by setting this variable to false.
  
 +receive.certNonceSeed::
 +      By setting this variable to a string, `git receive-pack`
 +      will accept a `git push --signed` and verifies it by using
 +      a "nonce" protected by HMAC using this string as a secret
 +      key.
 +
 +receive.certNonceSlop::
 +      When a `git push --signed` sent a push certificate with a
 +      "nonce" that was issued by a receive-pack serving the same
 +      repository within this many seconds, export the "nonce"
 +      found in the certificate to `GIT_PUSH_CERT_NONCE` to the
 +      hooks (instead of what the receive-pack asked the sending
 +      side to include).  This may allow writing checks in
 +      `pre-receive` and `post-receive` a bit easier.  Instead of
 +      checking `GIT_PUSH_CERT_NONCE_SLOP` environment variable
 +      that records by how many seconds the nonce is stale to
 +      decide if they want to accept the certificate, they only
 +      can check `GIT_PUSH_CERT_NONCE_STATUS` is `OK`.
 +
  receive.fsckObjects::
        If it is set to true, git-receive-pack will check all received
        objects. It will abort in the case of a malformed object or a
        Defaults to false. If not set, the value of `transfer.fsckObjects`
        is used instead.
  
 +receive.fsck.<msg-id>::
 +      When `receive.fsckObjects` is set to true, errors can be switched
 +      to warnings and vice versa by configuring the `receive.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
 +      `receive.fsck.missingEmail = ignore` will hide that issue.
 ++
 +This feature is intended to support working with legacy repositories
 +which would not pass pushing when `receive.fsckObjects = true`, allowing
 +the host to accept repositories with certain known issues but still catch
 +other issues.
 +
 +receive.fsck.skipList::
 +      The path to a sorted list of object names (i.e. one SHA-1 per
 +      line) that are known to be broken in a non-fatal way and should
 +      be ignored. 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.
 +
  receive.unpackLimit::
        If the number of objects received in a push is below this
        limit then the objects will be unpacked into loose object
@@@ -2337,17 -1953,6 +2337,17 @@@ receive.denyCurrentBranch:
        print a warning of such a push to stderr, but allow the push to
        proceed. If set to false or "ignore", allow such pushes with no
        message. Defaults to "refuse".
 ++
 +Another option is "updateInstead" which will update the working
 +tree if pushing into the current branch.  This option is
 +intended for synchronizing working directories when one side is not easily
 +accessible via interactive ssh (e.g. a live web site, hence the requirement
 +that the working directory be clean). This mode also comes in handy when
 +developing inside a VM to test and fix code on different Operating Systems.
 ++
 +By default, "updateInstead" will refuse the push if the working tree or
 +the index have any difference from the HEAD, but the `push-to-checkout`
 +hook can be used to customize this.  See linkgit:githooks[5].
  
  receive.denyNonFastForwards::
        If set to true, git-receive-pack will deny a ref update which is
        even if that push is forced. This configuration variable is
        set when initializing a shared repository.
  
 -receive.hiderefs::
 -      String(s) `receive-pack` uses to decide which refs to omit
 -      from its initial advertisement.  Use more than one
 -      definitions to specify multiple prefix strings. A ref that
 -      are under the hierarchies listed on the value of this
 -      variable is excluded, and is hidden when responding to `git
 -      push`, and an attempt to update or delete a hidden ref by
 -      `git push` is rejected.
 +receive.hideRefs::
 +      This variable is the same as `transfer.hideRefs`, but applies
 +      only to `receive-pack` (and so affects pushes, but not fetches).
 +      An attempt to update or delete a hidden ref by `git push` is
 +      rejected.
  
 -receive.updateserverinfo::
 +receive.updateServerInfo::
        If set to true, git-receive-pack will run git-update-server-info
        after receiving data from git-push and updating refs.
  
 -remote.pushdefault::
 +receive.shallowUpdate::
 +      If set to true, .git/shallow can be updated when new refs
 +      require new shallow roots. Otherwise those refs are rejected.
 +
 +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.
 +      `branch.<name>.pushRemote` for specific branches.
  
  remote.<name>.url::
        The URL of a remote repository.  See linkgit:git-fetch[1] or
@@@ -2410,35 -2014,29 +2410,35 @@@ remote.<name>.skipFetchAll:
  
  remote.<name>.receivepack::
        The default program to execute on the remote side when pushing.  See
 -      option \--receive-pack of linkgit:git-push[1].
 +      option --receive-pack of linkgit:git-push[1].
  
  remote.<name>.uploadpack::
        The default program to execute on the remote side when fetching.  See
 -      option \--upload-pack of linkgit:git-fetch-pack[1].
 +      option --upload-pack of linkgit:git-fetch-pack[1].
  
 -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
 +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
 +      override this setting. See options --tags and --no-tags of
        linkgit:git-fetch[1].
  
  remote.<name>.vcs::
        Setting this to a value <vcs> will cause Git to interact with
        the remote with the git-remote-<vcs> helper.
  
 +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.
 +
  remotes.<group>::
        The list of remotes which are fetched by "git remote update
        <group>".  See linkgit:git-remote[1].
  
 -repack.usedeltabaseoffset::
 +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
        "false" and repack. Access from old Git versions over the
        native protocol are unaffected by this option.
  
 -rerere.autoupdate::
 +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.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.  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.
@@@ -2480,12 -2063,12 +2480,12 @@@ sendemail.identity:
        values in the 'sendemail' section. The default identity is
        the value of 'sendemail.identity'.
  
 -sendemail.smtpencryption::
 +sendemail.smtpEncryption::
        See linkgit:git-send-email[1] for description.  Note that this
        setting is not subject to the 'identity' mechanism.
  
 -sendemail.smtpssl::
 -      Deprecated alias for 'sendemail.smtpencryption = ssl'.
 +sendemail.smtpssl (deprecated)::
 +      Deprecated alias for 'sendemail.smtpEncryption = ssl'.
  
  sendemail.smtpsslcertpath::
        Path to ca-certificates (either a directory or a single file).
@@@ -2497,34 -2080,32 +2497,34 @@@ sendemail.<identity>.*:
        identity is selected, through command-line or
        'sendemail.identity'.
  
 -sendemail.aliasesfile::
 -sendemail.aliasfiletype::
 +sendemail.aliasesFile::
 +sendemail.aliasFileType::
  sendemail.annotate::
  sendemail.bcc::
  sendemail.cc::
 -sendemail.cccmd::
 -sendemail.chainreplyto::
 +sendemail.ccCmd::
 +sendemail.chainReplyTo::
  sendemail.confirm::
 -sendemail.envelopesender::
 +sendemail.envelopeSender::
  sendemail.from::
 -sendemail.multiedit::
 +sendemail.multiEdit::
  sendemail.signedoffbycc::
 -sendemail.smtppass::
 +sendemail.smtpPass::
  sendemail.suppresscc::
 -sendemail.suppressfrom::
 +sendemail.suppressFrom::
  sendemail.to::
 -sendemail.smtpdomain::
 -sendemail.smtpserver::
 -sendemail.smtpserverport::
 -sendemail.smtpserveroption::
 -sendemail.smtpuser::
 +sendemail.smtpDomain::
 +sendemail.smtpServer::
 +sendemail.smtpServerPort::
 +sendemail.smtpServerOption::
 +sendemail.smtpUser::
  sendemail.thread::
 +sendemail.transferEncoding::
  sendemail.validate::
 +sendemail.xmailer::
        See linkgit:git-send-email[1] for description.
  
 -sendemail.signedoffcc::
 +sendemail.signedoffcc (deprecated)::
        Deprecated alias for 'sendemail.signedoffbycc'.
  
  showbranch.default::
@@@ -2545,19 -2126,12 +2545,19 @@@ 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.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
 -      all the files in the whole repository, which might be slow on some
 +      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:
  +
@@@ -2571,34 -2145,21 +2571,34 @@@ If this variable is not specified, it d
  This variable can be overridden with the -u|--untracked-files option
  of linkgit:git-status[1] and linkgit:git-commit[1].
  
 -status.submodulesummary::
 +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]).
 +      --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.
  
  submodule.<name>.path::
  submodule.<name>.url::
 +      The path within this project and URL for a submodule. These
 +      variables are initially populated by 'git submodule init'. See
 +      linkgit:git-submodule[1] and linkgit:gitmodules[5] for
 +      details.
 +
  submodule.<name>.update::
 -      The path within this project, URL, and the updating strategy
 -      for a submodule.  These variables are initially populated
 -      by 'git submodule init'; edit them to override the
 -      URL and other values found in the `.gitmodules` file.  See
 -      linkgit:git-submodule[1] and linkgit:gitmodules[5] for details.
 +      The default update procedure for a submodule. This variable
 +      is populated by `git submodule init` from the
 +      linkgit:gitmodules[5] file. See description of 'update'
 +      command in linkgit:git-submodule[1].
  
  submodule.<name>.branch::
        The remote branch name for a submodule, used by `git submodule
  submodule.<name>.fetchRecurseSubmodules::
        This option can be used to control recursive fetching of this
        submodule. It can be overridden by using the --[no-]recurse-submodules
 -      command line option to "git fetch" and "git pull".
 +      command-line option to "git fetch" and "git pull".
        This setting will override that from in the linkgit:gitmodules[5]
        file.
  
  submodule.<name>.ignore::
        Defines under what circumstances "git status" and the diff family show
        a submodule as modified. When set to "all", it will never be considered
 -      modified, "dirty" will ignore all changes to the submodules work tree and
 +      modified (but it will nonetheless show up in the output of status and
 +      commit when it has been staged), "dirty" will ignore all changes
 +      to the submodules work tree and
        takes only differences between the HEAD of the submodule and the commit
        recorded in the superproject into account. "untracked" will additionally
        let submodules with modified tracked files in their work tree show up.
        submodules that have untracked files in their work tree as changed.
        This setting overrides any setting made in .gitmodules for this submodule,
        both settings can be overridden on the command line by using the
 -      "--ignore-submodules" option.
 +      "--ignore-submodules" option. The 'git submodule' commands are not
 +      affected by this setting.
 +
 +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
@@@ -2646,60 -2199,30 +2646,60 @@@ transfer.fsckObjects:
        not set, the value of this variable is used instead.
        Defaults to false.
  
 -transfer.hiderefs::
 -      This variable can be used to set both `receive.hiderefs`
 -      and `uploadpack.hiderefs` at the same time to the same
 -      values.  See entries for these other variables.
 +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).
  
  transfer.unpackLimit::
        When `fetch.unpackLimit` or `receive.unpackLimit` are
        not set, the value of this variable is used instead.
        The default value is 100.
  
 -uploadpack.hiderefs::
 -      String(s) `upload-pack` uses to decide which refs to omit
 -      from its initial advertisement.  Use more than one
 -      definitions to specify multiple prefix strings. A ref that
 -      are under the hierarchies listed on the value of this
 -      variable is excluded, and is hidden from `git ls-remote`,
 -      `git fetch`, etc.  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`
 +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`.
 +      see also `uploadpack.hideRefs`.
 +
 +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`.
 +
 +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.
  
  url.<base>.insteadOf::
        Any URL that starts with this value will be rewritten to
@@@ -2735,24 -2258,12 +2735,24 @@@ user.name:
        Can be overridden by the 'GIT_AUTHOR_NAME' and 'GIT_COMMITTER_NAME'
        environment variables.  See linkgit:git-commit-tree[1].
  
 -user.signingkey::
 -      If linkgit:git-tag[1] is not selecting the key you want it to
 -      automatically when creating a signed tag, 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.
 +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::
 +      When version sort is used in linkgit:git-tag[1], prerelease
 +      tags (e.g. "1.0-rc1") may appear after the main release
 +      "1.0". By specifying the suffix "-rc" in this variable,
 +      "1.0-rc1" will appear before "1.0".
 ++
 +This variable can be specified multiple times, once per suffix. The
 +order of suffixes in the config file determines the sorting order
 +(e.g. if "-pre" appears before "-rc" in the config file then 1.0-preXX
 +is sorted before 1.0-rcXX). 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.