timestamp_t: a new data type for timestamps
[gitweb.git] / Documentation / git.txt
index 276491223a1e4536cd7a6913b1bf1fb75f7012b0..ecc1bb4bd7c3e6adc82c9955817b532bedadc453 100644 (file)
@@ -9,10 +9,11 @@ git - the stupid content tracker
 SYNOPSIS
 --------
 [verse]
-'git' [--version] [--help] [-c <name>=<value>]
+'git' [--version] [--help] [-C <path>] [-c <name>=<value>]
     [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
     [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
     [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
+    [--super-prefix=<path>]
     <command> [<args>]
 
 DESCRIPTION
@@ -22,30 +23,207 @@ unusually rich command set that provides both high-level operations
 and full access to internals.
 
 See linkgit:gittutorial[7] to get started, then see
-link:everyday.html[Everyday Git] for a useful minimum set of
+linkgit:giteveryday[7] for a useful minimum set of
 commands.  The link:user-manual.html[Git User's Manual] has a more
 in-depth introduction.
 
 After you mastered the basic concepts, you can come back to this
-page to learn what commands git offers.  You can learn more about
-individual git commands with "git help command".  linkgit:gitcli[7]
-manual page gives you an overview of the command line command syntax.
+page to learn what commands Git offers.  You can learn more about
+individual Git commands with "git help command".  linkgit:gitcli[7]
+manual page gives you an overview of the command-line command syntax.
 
-Formatted and hyperlinked version of the latest git documentation
-can be viewed at `http://git-htmldocs.googlecode.com/git/git.html`.
+A formatted and hyperlinked copy of the latest Git documentation
+can be viewed at `https://git.github.io/htmldocs/git.html`.
 
 ifdef::stalenotes[]
 [NOTE]
 ============
 
 You are reading the documentation for the latest (possibly
-unreleased) version of git, that is available from 'master'
+unreleased) version of Git, that is available from the 'master'
 branch of the `git.git` repository.
 Documentation for older releases are available here:
 
-* link:v1.8.1.1/git.html[documentation for release 1.8.1.1]
+* link:v2.12.2/git.html[documentation for release 2.12.2]
 
 * release notes for
+  link:RelNotes/2.12.2.txt[2.12.2].
+  link:RelNotes/2.12.1.txt[2.12.1].
+  link:RelNotes/2.12.0.txt[2.12].
+
+* link:v2.11.1/git.html[documentation for release 2.11.1]
+
+* release notes for
+  link:RelNotes/2.11.1.txt[2.11.1],
+  link:RelNotes/2.11.0.txt[2.11].
+
+* link:v2.10.2/git.html[documentation for release 2.10.2]
+
+* release notes for
+  link:RelNotes/2.10.2.txt[2.10.2],
+  link:RelNotes/2.10.1.txt[2.10.1],
+  link:RelNotes/2.10.0.txt[2.10].
+
+* link:v2.9.3/git.html[documentation for release 2.9.3]
+
+* release notes for
+  link:RelNotes/2.9.3.txt[2.9.3],
+  link:RelNotes/2.9.2.txt[2.9.2],
+  link:RelNotes/2.9.1.txt[2.9.1],
+  link:RelNotes/2.9.0.txt[2.9].
+
+* link:v2.8.4/git.html[documentation for release 2.8.4]
+
+* release notes for
+  link:RelNotes/2.8.4.txt[2.8.4],
+  link:RelNotes/2.8.3.txt[2.8.3],
+  link:RelNotes/2.8.2.txt[2.8.2],
+  link:RelNotes/2.8.1.txt[2.8.1],
+  link:RelNotes/2.8.0.txt[2.8].
+
+* link:v2.7.3/git.html[documentation for release 2.7.3]
+
+* release notes for
+  link:RelNotes/2.7.3.txt[2.7.3],
+  link:RelNotes/2.7.2.txt[2.7.2],
+  link:RelNotes/2.7.1.txt[2.7.1],
+  link:RelNotes/2.7.0.txt[2.7].
+
+* link:v2.6.6/git.html[documentation for release 2.6.6]
+
+* release notes for
+  link:RelNotes/2.6.6.txt[2.6.6],
+  link:RelNotes/2.6.5.txt[2.6.5],
+  link:RelNotes/2.6.4.txt[2.6.4],
+  link:RelNotes/2.6.3.txt[2.6.3],
+  link:RelNotes/2.6.2.txt[2.6.2],
+  link:RelNotes/2.6.1.txt[2.6.1],
+  link:RelNotes/2.6.0.txt[2.6].
+
+* link:v2.5.5/git.html[documentation for release 2.5.5]
+
+* release notes for
+  link:RelNotes/2.5.5.txt[2.5.5],
+  link:RelNotes/2.5.4.txt[2.5.4],
+  link:RelNotes/2.5.3.txt[2.5.3],
+  link:RelNotes/2.5.2.txt[2.5.2],
+  link:RelNotes/2.5.1.txt[2.5.1],
+  link:RelNotes/2.5.0.txt[2.5].
+
+* link:v2.4.11/git.html[documentation for release 2.4.11]
+
+* release notes for
+  link:RelNotes/2.4.11.txt[2.4.11],
+  link:RelNotes/2.4.10.txt[2.4.10],
+  link:RelNotes/2.4.9.txt[2.4.9],
+  link:RelNotes/2.4.8.txt[2.4.8],
+  link:RelNotes/2.4.7.txt[2.4.7],
+  link:RelNotes/2.4.6.txt[2.4.6],
+  link:RelNotes/2.4.5.txt[2.4.5],
+  link:RelNotes/2.4.4.txt[2.4.4],
+  link:RelNotes/2.4.3.txt[2.4.3],
+  link:RelNotes/2.4.2.txt[2.4.2],
+  link:RelNotes/2.4.1.txt[2.4.1],
+  link:RelNotes/2.4.0.txt[2.4].
+
+* link:v2.3.10/git.html[documentation for release 2.3.10]
+
+* release notes for
+  link:RelNotes/2.3.10.txt[2.3.10],
+  link:RelNotes/2.3.9.txt[2.3.9],
+  link:RelNotes/2.3.8.txt[2.3.8],
+  link:RelNotes/2.3.7.txt[2.3.7],
+  link:RelNotes/2.3.6.txt[2.3.6],
+  link:RelNotes/2.3.5.txt[2.3.5],
+  link:RelNotes/2.3.4.txt[2.3.4],
+  link:RelNotes/2.3.3.txt[2.3.3],
+  link:RelNotes/2.3.2.txt[2.3.2],
+  link:RelNotes/2.3.1.txt[2.3.1],
+  link:RelNotes/2.3.0.txt[2.3].
+
+* link:v2.2.3/git.html[documentation for release 2.2.3]
+
+* release notes for
+  link:RelNotes/2.2.3.txt[2.2.3],
+  link:RelNotes/2.2.2.txt[2.2.2],
+  link:RelNotes/2.2.1.txt[2.2.1],
+  link:RelNotes/2.2.0.txt[2.2].
+
+* link:v2.1.4/git.html[documentation for release 2.1.4]
+
+* release notes for
+  link:RelNotes/2.1.4.txt[2.1.4],
+  link:RelNotes/2.1.3.txt[2.1.3],
+  link:RelNotes/2.1.2.txt[2.1.2],
+  link:RelNotes/2.1.1.txt[2.1.1],
+  link:RelNotes/2.1.0.txt[2.1].
+
+* link:v2.0.5/git.html[documentation for release 2.0.5]
+
+* release notes for
+  link:RelNotes/2.0.5.txt[2.0.5],
+  link:RelNotes/2.0.4.txt[2.0.4],
+  link:RelNotes/2.0.3.txt[2.0.3],
+  link:RelNotes/2.0.2.txt[2.0.2],
+  link:RelNotes/2.0.1.txt[2.0.1],
+  link:RelNotes/2.0.0.txt[2.0.0].
+
+* link:v1.9.5/git.html[documentation for release 1.9.5]
+
+* release notes for
+  link:RelNotes/1.9.5.txt[1.9.5],
+  link:RelNotes/1.9.4.txt[1.9.4],
+  link:RelNotes/1.9.3.txt[1.9.3],
+  link:RelNotes/1.9.2.txt[1.9.2],
+  link:RelNotes/1.9.1.txt[1.9.1],
+  link:RelNotes/1.9.0.txt[1.9.0].
+
+* link:v1.8.5.6/git.html[documentation for release 1.8.5.6]
+
+* release notes for
+  link:RelNotes/1.8.5.6.txt[1.8.5.6],
+  link:RelNotes/1.8.5.5.txt[1.8.5.5],
+  link:RelNotes/1.8.5.4.txt[1.8.5.4],
+  link:RelNotes/1.8.5.3.txt[1.8.5.3],
+  link:RelNotes/1.8.5.2.txt[1.8.5.2],
+  link:RelNotes/1.8.5.1.txt[1.8.5.1],
+  link:RelNotes/1.8.5.txt[1.8.5].
+
+* link:v1.8.4.5/git.html[documentation for release 1.8.4.5]
+
+* release notes for
+  link:RelNotes/1.8.4.5.txt[1.8.4.5],
+  link:RelNotes/1.8.4.4.txt[1.8.4.4],
+  link:RelNotes/1.8.4.3.txt[1.8.4.3],
+  link:RelNotes/1.8.4.2.txt[1.8.4.2],
+  link:RelNotes/1.8.4.1.txt[1.8.4.1],
+  link:RelNotes/1.8.4.txt[1.8.4].
+
+* link:v1.8.3.4/git.html[documentation for release 1.8.3.4]
+
+* release notes for
+  link:RelNotes/1.8.3.4.txt[1.8.3.4],
+  link:RelNotes/1.8.3.3.txt[1.8.3.3],
+  link:RelNotes/1.8.3.2.txt[1.8.3.2],
+  link:RelNotes/1.8.3.1.txt[1.8.3.1],
+  link:RelNotes/1.8.3.txt[1.8.3].
+
+* link:v1.8.2.3/git.html[documentation for release 1.8.2.3]
+
+* release notes for
+  link:RelNotes/1.8.2.3.txt[1.8.2.3],
+  link:RelNotes/1.8.2.2.txt[1.8.2.2],
+  link:RelNotes/1.8.2.1.txt[1.8.2.1],
+  link:RelNotes/1.8.2.txt[1.8.2].
+
+* link:v1.8.1.6/git.html[documentation for release 1.8.1.6]
+
+* release notes for
+  link:RelNotes/1.8.1.6.txt[1.8.1.6],
+  link:RelNotes/1.8.1.5.txt[1.8.1.5],
+  link:RelNotes/1.8.1.4.txt[1.8.1.4],
+  link:RelNotes/1.8.1.3.txt[1.8.1.3],
+  link:RelNotes/1.8.1.2.txt[1.8.1.2],
   link:RelNotes/1.8.1.1.txt[1.8.1.1],
   link:RelNotes/1.8.1.txt[1.8.1].
 
@@ -355,12 +533,12 @@ endif::stalenotes[]
 OPTIONS
 -------
 --version::
-       Prints the git suite version that the 'git' program came from.
+       Prints the Git suite version that the 'git' program came from.
 
 --help::
        Prints the synopsis and a list of the most commonly used
-       commands. If the option '--all' or '-a' is given then all
-       available commands are printed. If a git command is named this
+       commands. If the option `--all` or `-a` is given then all
+       available commands are printed. If a Git command is named this
        option will bring up the manual page for that command.
 +
 Other options are available to control how the manual page is
@@ -368,29 +546,48 @@ displayed. See linkgit:git-help[1] for more information,
 because `git --help ...` is converted internally into `git
 help ...`.
 
+-C <path>::
+       Run as if git was started in '<path>' instead of the current working
+       directory.  When multiple `-C` options are given, each subsequent
+       non-absolute `-C <path>` is interpreted relative to the preceding `-C
+       <path>`.
++
+This option affects options that expect path name like `--git-dir` and
+`--work-tree` in that their interpretations of the path names would be
+made relative to the working directory caused by the `-C` option. For
+example the following invocations are equivalent:
+
+    git --git-dir=a.git --work-tree=b -C c status
+    git --git-dir=c/a.git --work-tree=c/b status
+
 -c <name>=<value>::
        Pass a configuration parameter to the command. The value
        given will override values from configuration files.
        The <name> is expected in the same format as listed by
        'git config' (subkeys separated by dots).
++
+Note that omitting the `=` in `git -c foo.bar ...` is allowed and sets
+`foo.bar` to the boolean true value (just like `[foo]bar` would in a
+config file). Including the equals but with an empty value (like `git -c
+foo.bar= ...`) sets `foo.bar` to the empty string.
 
 --exec-path[=<path>]::
-       Path to wherever your core git programs are installed.
+       Path to wherever your core Git programs are installed.
        This can also be controlled by setting the GIT_EXEC_PATH
        environment variable. If no path is given, 'git' will print
        the current setting and then exit.
 
 --html-path::
-       Print the path, without trailing slash, where git's HTML
+       Print the path, without trailing slash, where Git's HTML
        documentation is installed and exit.
 
 --man-path::
        Print the manpath (see `man(1)`) for the man pages for
-       this version of git and exit.
+       this version of Git and exit.
 
 --info-path::
        Print the path where the Info files documenting this
-       version of git are installed and exit.
+       version of Git are installed and exit.
 
 -p::
 --paginate::
@@ -400,11 +597,11 @@ help ...`.
        below).
 
 --no-pager::
-       Do not pipe git output into a pager.
+       Do not pipe Git output into a pager.
 
 --git-dir=<path>::
        Set the path to the repository. This can also be controlled by
-       setting the GIT_DIR environment variable. It can be an absolute
+       setting the `GIT_DIR` environment variable. It can be an absolute
        path or relative path to current working directory.
 
 --work-tree=<path>::
@@ -416,24 +613,49 @@ help ...`.
        more detailed discussion).
 
 --namespace=<path>::
-       Set the git namespace.  See linkgit:gitnamespaces[7] for more
+       Set the Git namespace.  See linkgit:gitnamespaces[7] for more
        details.  Equivalent to setting the `GIT_NAMESPACE` environment
        variable.
 
+--super-prefix=<path>::
+       Currently for internal use only.  Set a prefix which gives a path from
+       above a repository down to its root.  One use is to give submodules
+       context about the superproject that invoked it.
+
 --bare::
        Treat the repository as a bare repository.  If GIT_DIR
        environment is not set, it is set to the current working
        directory.
 
 --no-replace-objects::
-       Do not use replacement refs to replace git objects. See
+       Do not use replacement refs to replace Git objects. See
        linkgit:git-replace[1] for more information.
 
+--literal-pathspecs::
+       Treat pathspecs literally (i.e. no globbing, no pathspec magic).
+       This is equivalent to setting the `GIT_LITERAL_PATHSPECS` environment
+       variable to `1`.
+
+--glob-pathspecs::
+       Add "glob" magic to all pathspec. This is equivalent to setting
+       the `GIT_GLOB_PATHSPECS` environment variable to `1`. Disabling
+       globbing on individual pathspecs can be done using pathspec
+       magic ":(literal)"
+
+--noglob-pathspecs::
+       Add "literal" magic to all pathspec. This is equivalent to setting
+       the `GIT_NOGLOB_PATHSPECS` environment variable to `1`. Enabling
+       globbing on individual pathspecs can be done using pathspec
+       magic ":(glob)"
+
+--icase-pathspecs::
+       Add "icase" magic to all pathspec. This is equivalent to setting
+       the `GIT_ICASE_PATHSPECS` environment variable to `1`.
 
 GIT COMMANDS
 ------------
 
-We divide git into high level ("porcelain") commands and low level
+We divide Git into high level ("porcelain") commands and low level
 ("plumbing") commands.
 
 High-level commands (porcelain)
@@ -470,7 +692,7 @@ include::cmds-foreignscminterface.txt[]
 Low-level commands (plumbing)
 -----------------------------
 
-Although git includes its
+Although Git includes its
 own porcelain layer, its low-level commands are sufficient to support
 development of alternative porcelains.  Developers of such porcelains
 might start by reading about linkgit:git-update-index[1] and
@@ -528,10 +750,9 @@ include::cmds-purehelpers.txt[]
 Configuration Mechanism
 -----------------------
 
-Starting from 0.99.9 (actually mid 0.99.8.GIT), `.git/config` file
-is used to hold per-repository configuration options.  It is a
-simple text file modeled after `.ini` format familiar to some
-people.  Here is an example:
+Git uses a simple text format to store customizations that are per
+repository and are per user.  Such a configuration file may look
+like this:
 
 ------------
 #
@@ -546,13 +767,13 @@ people.  Here is an example:
 ; user identity
 [user]
        name = "Junio C Hamano"
-       email = "junkio@twinsun.com"
+       email = "gitster@pobox.com"
 
 ------------
 
 Various commands read from the configuration file and adjust
 their operation accordingly.  See linkgit:git-config[1] for a
-list.
+list and more details about the configuration mechanism.
 
 
 Identifier Terminology
@@ -591,7 +812,7 @@ Identifier Terminology
 
 Symbolic Identifiers
 --------------------
-Any git command accepting any <object> can also use the following
+Any Git command accepting any <object> can also use the following
 symbolic notation:
 
 HEAD::
@@ -627,91 +848,117 @@ Please see linkgit:gitglossary[7].
 
 Environment Variables
 ---------------------
-Various git commands use the following environment variables:
+Various Git commands use the following environment variables:
 
-The git Repository
+The Git Repository
 ~~~~~~~~~~~~~~~~~~
-These environment variables apply to 'all' core git commands. Nb: it
+These environment variables apply to 'all' core Git commands. Nb: it
 is worth noting that they may be used/overridden by SCMS sitting above
-git so take care if using Cogito etc.
+Git so take care if using a foreign front-end.
 
-'GIT_INDEX_FILE'::
+`GIT_INDEX_FILE`::
        This environment allows the specification of an alternate
        index file. If not specified, the default of `$GIT_DIR/index`
        is used.
 
-'GIT_OBJECT_DIRECTORY'::
+`GIT_INDEX_VERSION`::
+       This environment variable allows the specification of an index
+       version for new repositories.  It won't affect existing index
+       files.  By default index file version 2 or 3 is used. See
+       linkgit:git-update-index[1] for more information.
+
+`GIT_OBJECT_DIRECTORY`::
        If the object storage directory is specified via this
        environment variable then the sha1 directories are created
        underneath - otherwise the default `$GIT_DIR/objects`
        directory is used.
 
-'GIT_ALTERNATE_OBJECT_DIRECTORIES'::
-       Due to the immutable nature of git objects, old objects can be
+`GIT_ALTERNATE_OBJECT_DIRECTORIES`::
+       Due to the immutable nature of Git objects, old objects can be
        archived into shared, read-only directories. This variable
        specifies a ":" separated (on Windows ";" separated) list
-       of git object directories which can be used to search for git
+       of Git object directories which can be used to search for Git
        objects. New objects will not be written to these directories.
-
-'GIT_DIR'::
-       If the 'GIT_DIR' environment variable is set then it
++
+       Entries that begin with `"` (double-quote) will be interpreted
+       as C-style quoted paths, removing leading and trailing
+       double-quotes and respecting backslash escapes. E.g., the value
+       `"path-with-\"-and-:-in-it":vanilla-path` has two paths:
+       `path-with-"-and-:-in-it` and `vanilla-path`.
+
+`GIT_DIR`::
+       If the `GIT_DIR` environment variable is set then it
        specifies a path to use instead of the default `.git`
        for the base of the repository.
-       The '--git-dir' command-line option also sets this value.
+       The `--git-dir` command-line option also sets this value.
 
-'GIT_WORK_TREE'::
-       Set the path to the working tree.  The value will not be
-       used in combination with repositories found automatically in
-       a .git directory (i.e. $GIT_DIR is not set).
-       This can also be controlled by the '--work-tree' command line
+`GIT_WORK_TREE`::
+       Set the path to the root of the working tree.
+       This can also be controlled by the `--work-tree` command-line
        option and the core.worktree configuration variable.
 
-'GIT_NAMESPACE'::
-       Set the git namespace; see linkgit:gitnamespaces[7] for details.
-       The '--namespace' command-line option also sets this value.
-
-'GIT_CEILING_DIRECTORIES'::
-       This should be a colon-separated list of absolute paths.
-       If set, it is a list of directories that git should not chdir
-       up into while looking for a repository directory.
-       It will not exclude the current working directory or
-       a GIT_DIR set on the command line or in the environment.
-       (Useful for excluding slow-loading network directories.)
-
-'GIT_DISCOVERY_ACROSS_FILESYSTEM'::
+`GIT_NAMESPACE`::
+       Set the Git namespace; see linkgit:gitnamespaces[7] for details.
+       The `--namespace` command-line option also sets this value.
+
+`GIT_CEILING_DIRECTORIES`::
+       This should be a colon-separated list of absolute paths.  If
+       set, it is a list of directories that Git should not chdir up
+       into while looking for a repository directory (useful for
+       excluding slow-loading network directories).  It will not
+       exclude the current working directory or a GIT_DIR set on the
+       command line or in the environment.  Normally, Git has to read
+       the entries in this list and resolve any symlink that
+       might be present in order to compare them with the current
+       directory.  However, if even this access is slow, you
+       can add an empty entry to the list to tell Git that the
+       subsequent entries are not symlinks and needn't be resolved;
+       e.g.,
+       `GIT_CEILING_DIRECTORIES=/maybe/symlink::/very/slow/non/symlink`.
+
+`GIT_DISCOVERY_ACROSS_FILESYSTEM`::
        When run in a directory that does not have ".git" repository
-       directory, git tries to find such a directory in the parent
+       directory, Git tries to find such a directory in the parent
        directories to find the top of the working tree, but by default it
        does not cross filesystem boundaries.  This environment variable
-       can be set to true to tell git not to stop at filesystem
-       boundaries.  Like 'GIT_CEILING_DIRECTORIES', this will not affect
-       an explicit repository directory set via 'GIT_DIR' or on the
+       can be set to true to tell Git not to stop at filesystem
+       boundaries.  Like `GIT_CEILING_DIRECTORIES`, this will not affect
+       an explicit repository directory set via `GIT_DIR` or on the
        command line.
 
-git Commits
+`GIT_COMMON_DIR`::
+       If this variable is set to a path, non-worktree files that are
+       normally in $GIT_DIR will be taken from this path
+       instead. Worktree-specific files such as HEAD or index are
+       taken from $GIT_DIR. See linkgit:gitrepository-layout[5] and
+       linkgit:git-worktree[1] for
+       details. This variable has lower precedence than other path
+       variables such as GIT_INDEX_FILE, GIT_OBJECT_DIRECTORY...
+
+Git Commits
 ~~~~~~~~~~~
-'GIT_AUTHOR_NAME'::
-'GIT_AUTHOR_EMAIL'::
-'GIT_AUTHOR_DATE'::
-'GIT_COMMITTER_NAME'::
-'GIT_COMMITTER_EMAIL'::
-'GIT_COMMITTER_DATE'::
+`GIT_AUTHOR_NAME`::
+`GIT_AUTHOR_EMAIL`::
+`GIT_AUTHOR_DATE`::
+`GIT_COMMITTER_NAME`::
+`GIT_COMMITTER_EMAIL`::
+`GIT_COMMITTER_DATE`::
 'EMAIL'::
        see linkgit:git-commit-tree[1]
 
-git Diffs
+Git Diffs
 ~~~~~~~~~
-'GIT_DIFF_OPTS'::
+`GIT_DIFF_OPTS`::
        Only valid setting is "--unified=??" or "-u??" to set the
        number of context lines shown when a unified diff is created.
        This takes precedence over any "-U" or "--unified" option
-       value passed on the git diff command line.
+       value passed on the Git diff command line.
 
-'GIT_EXTERNAL_DIFF'::
-       When the environment variable 'GIT_EXTERNAL_DIFF' is set, the
+`GIT_EXTERNAL_DIFF`::
+       When the environment variable `GIT_EXTERNAL_DIFF` is set, the
        program named by it is called, instead of the diff invocation
        described above.  For a path that is added, removed, or modified,
-        'GIT_EXTERNAL_DIFF' is called with 7 parameters:
+       `GIT_EXTERNAL_DIFF` is called with 7 parameters:
 
        path old-file old-hex old-mode new-file new-hex new-mode
 +
@@ -719,61 +966,85 @@ where:
 
        <old|new>-file:: are files GIT_EXTERNAL_DIFF can use to read the
                          contents of <old|new>,
-       <old|new>-hex:: are the 40-hexdigit SHA1 hashes,
+       <old|new>-hex:: are the 40-hexdigit SHA-1 hashes,
        <old|new>-mode:: are the octal representation of the file modes.
 +
 The file parameters can point at the user's working file
 (e.g. `new-file` in "git-diff-files"), `/dev/null` (e.g. `old-file`
 when a new file is added), or a temporary file (e.g. `old-file` in the
-index).  'GIT_EXTERNAL_DIFF' should not worry about unlinking the
-temporary file --- it is removed when 'GIT_EXTERNAL_DIFF' exits.
+index).  `GIT_EXTERNAL_DIFF` should not worry about unlinking the
+temporary file --- it is removed when `GIT_EXTERNAL_DIFF` exits.
 +
-For a path that is unmerged, 'GIT_EXTERNAL_DIFF' is called with 1
+For a path that is unmerged, `GIT_EXTERNAL_DIFF` is called with 1
 parameter, <path>.
++
+For each path `GIT_EXTERNAL_DIFF` is called, two environment variables,
+`GIT_DIFF_PATH_COUNTER` and `GIT_DIFF_PATH_TOTAL` are set.
+
+`GIT_DIFF_PATH_COUNTER`::
+       A 1-based counter incremented by one for every path.
+
+`GIT_DIFF_PATH_TOTAL`::
+       The total number of paths.
 
 other
 ~~~~~
-'GIT_MERGE_VERBOSITY'::
+`GIT_MERGE_VERBOSITY`::
        A number controlling the amount of output shown by
        the recursive merge strategy.  Overrides merge.verbosity.
        See linkgit:git-merge[1]
 
-'GIT_PAGER'::
+`GIT_PAGER`::
        This environment variable overrides `$PAGER`. If it is set
-       to an empty string or to the value "cat", git will not launch
+       to an empty string or to the value "cat", Git will not launch
        a pager.  See also the `core.pager` option in
        linkgit:git-config[1].
 
-'GIT_EDITOR'::
+`GIT_EDITOR`::
        This environment variable overrides `$EDITOR` and `$VISUAL`.
-       It is used by several git commands when, on interactive mode,
+       It is used by several Git commands when, on interactive mode,
        an editor is to be launched. See also linkgit:git-var[1]
        and the `core.editor` option in linkgit:git-config[1].
 
-'GIT_SSH'::
-       If this environment variable is set then 'git fetch'
-       and 'git push' will use this command instead
-       of 'ssh' when they need to connect to a remote system.
-       The '$GIT_SSH' command will be given exactly two arguments:
-       the 'username@host' (or just 'host') from the URL and the
-       shell command to execute on that remote system.
+`GIT_SSH`::
+`GIT_SSH_COMMAND`::
+       If either of these environment variables is set then 'git fetch'
+       and 'git push' will use the specified command instead of 'ssh'
+       when they need to connect to a remote system.
+       The command will be given exactly two or four arguments: the
+       'username@host' (or just 'host') from the URL and the shell
+       command to execute on that remote system, optionally preceded by
+       `-p` (literally) and the 'port' from the URL when it specifies
+       something other than the default SSH port.
 +
-To pass options to the program that you want to list in GIT_SSH
-you will need to wrap the program and options into a shell script,
-then set GIT_SSH to refer to the shell script.
+`$GIT_SSH_COMMAND` takes precedence over `$GIT_SSH`, and is interpreted
+by the shell, which allows additional arguments to be included.
+`$GIT_SSH` on the other hand must be just the path to a program
+(which can be a wrapper shell script, if additional arguments are
+needed).
 +
 Usually it is easier to configure any desired options through your
 personal `.ssh/config` file.  Please consult your ssh documentation
 for further details.
 
-'GIT_ASKPASS'::
-       If this environment variable is set, then git commands which need to
+`GIT_SSH_VARIANT`::
+       If this environment variable is set, it overrides Git's autodetection
+       whether `GIT_SSH`/`GIT_SSH_COMMAND`/`core.sshCommand` refer to OpenSSH,
+       plink or tortoiseplink. This variable overrides the config setting
+       `ssh.variant` that serves the same purpose.
+
+`GIT_ASKPASS`::
+       If this environment variable is set, then Git commands which need to
        acquire passwords or passphrases (e.g. for HTTP or IMAP authentication)
-       will call this program with a suitable prompt as command line argument
-       and read the password from its STDOUT. See also the 'core.askpass'
+       will call this program with a suitable prompt as command-line argument
+       and read the password from its STDOUT. See also the `core.askPass`
        option in linkgit:git-config[1].
 
-'GIT_CONFIG_NOSYSTEM'::
+`GIT_TERMINAL_PROMPT`::
+       If this environment variable is set to `0`, git will not prompt
+       on the terminal (e.g., when asking for HTTP authentication).
+
+`GIT_CONFIG_NOSYSTEM`::
        Whether to skip reading settings from the system-wide
        `$(prefix)/etc/gitconfig` file.  This environment variable can
        be used along with `$HOME` and `$XDG_CONFIG_HOME` to create a
@@ -781,38 +1052,152 @@ for further details.
        temporarily to avoid using a buggy `/etc/gitconfig` file while
        waiting for someone with sufficient permissions to fix it.
 
-'GIT_FLUSH'::
+`GIT_FLUSH`::
        If this environment variable is set to "1", then commands such
        as 'git blame' (in incremental mode), 'git rev-list', 'git log',
-       and 'git whatchanged' will force a flush of the output stream
-       after each commit-oriented record have been flushed.   If this
+       'git check-attr' and 'git check-ignore' will
+       force a flush of the output stream after each record have been
+       flushed. If this
        variable is set to "0", the output of these commands will be done
        using completely buffered I/O.   If this environment variable is
-       not set, git will choose buffered or record-oriented flushing
+       not set, Git will choose buffered or record-oriented flushing
        based on whether stdout appears to be redirected to a file or not.
 
-'GIT_TRACE'::
-       If this variable is set to "1", "2" or "true" (comparison
-       is case insensitive), git will print `trace:` messages on
-       stderr telling about alias expansion, built-in command
-       execution and external command execution.
-       If this variable is set to an integer value greater than 1
-       and lower than 10 (strictly) then git will interpret this
-       value as an open file descriptor and will try to write the
-       trace messages into this file descriptor.
-       Alternatively, if this variable is set to an absolute path
-       (starting with a '/' character), git will interpret this
-       as a file path and will try to write the trace messages
-       into it.
+`GIT_TRACE`::
+       Enables general trace messages, e.g. alias expansion, built-in
+       command execution and external command execution.
++
+If this variable is set to "1", "2" or "true" (comparison
+is case insensitive), trace messages will be printed to
+stderr.
++
+If the variable is set to an integer value greater than 2
+and lower than 10 (strictly) then Git will interpret this
+value as an open file descriptor and will try to write the
+trace messages into this file descriptor.
++
+Alternatively, if the variable is set to an absolute path
+(starting with a '/' character), Git will interpret this
+as a file path and will try to write the trace messages
+into it.
++
+Unsetting the variable, or setting it to empty, "0" or
+"false" (case insensitive) disables trace messages.
+
+`GIT_TRACE_PACK_ACCESS`::
+       Enables trace messages for all accesses to any packs. For each
+       access, the pack file name and an offset in the pack is
+       recorded. This may be helpful for troubleshooting some
+       pack-related performance problems.
+       See `GIT_TRACE` for available trace output options.
+
+`GIT_TRACE_PACKET`::
+       Enables trace messages for all packets coming in or out of a
+       given program. This can help with debugging object negotiation
+       or other protocol issues. Tracing is turned off at a packet
+       starting with "PACK" (but see `GIT_TRACE_PACKFILE` below).
+       See `GIT_TRACE` for available trace output options.
+
+`GIT_TRACE_PACKFILE`::
+       Enables tracing of packfiles sent or received by a
+       given program. Unlike other trace output, this trace is
+       verbatim: no headers, and no quoting of binary data. You almost
+       certainly want to direct into a file (e.g.,
+       `GIT_TRACE_PACKFILE=/tmp/my.pack`) rather than displaying it on
+       the terminal or mixing it with other trace output.
++
+Note that this is currently only implemented for the client side
+of clones and fetches.
+
+`GIT_TRACE_PERFORMANCE`::
+       Enables performance related trace messages, e.g. total execution
+       time of each Git command.
+       See `GIT_TRACE` for available trace output options.
+
+`GIT_TRACE_SETUP`::
+       Enables trace messages printing the .git, working tree and current
+       working directory after Git has completed its setup phase.
+       See `GIT_TRACE` for available trace output options.
+
+`GIT_TRACE_SHALLOW`::
+       Enables trace messages that can help debugging fetching /
+       cloning of shallow repositories.
+       See `GIT_TRACE` for available trace output options.
+
+`GIT_TRACE_CURL`::
+       Enables a curl full trace dump of all incoming and outgoing data,
+       including descriptive information, of the git transport protocol.
+       This is similar to doing curl `--trace-ascii` on the command line.
+       This option overrides setting the `GIT_CURL_VERBOSE` environment
+       variable.
+       See `GIT_TRACE` for available trace output options.
+
+`GIT_LITERAL_PATHSPECS`::
+       Setting this variable to `1` will cause Git to treat all
+       pathspecs literally, rather than as glob patterns. For example,
+       running `GIT_LITERAL_PATHSPECS=1 git log -- '*.c'` will search
+       for commits that touch the path `*.c`, not any paths that the
+       glob `*.c` matches. You might want this if you are feeding
+       literal paths to Git (e.g., paths previously given to you by
+       `git ls-tree`, `--raw` diff output, etc).
+
+`GIT_GLOB_PATHSPECS`::
+       Setting this variable to `1` will cause Git to treat all
+       pathspecs as glob patterns (aka "glob" magic).
+
+`GIT_NOGLOB_PATHSPECS`::
+       Setting this variable to `1` will cause Git to treat all
+       pathspecs as literal (aka "literal" magic).
+
+`GIT_ICASE_PATHSPECS`::
+       Setting this variable to `1` will cause Git to treat all
+       pathspecs as case-insensitive.
+
+`GIT_REFLOG_ACTION`::
+       When a ref is updated, reflog entries are created to keep
+       track of the reason why the ref was updated (which is
+       typically the name of the high-level command that updated
+       the ref), in addition to the old and new values of the ref.
+       A scripted Porcelain command can use set_reflog_action
+       helper function in `git-sh-setup` to set its name to this
+       variable when it is invoked as the top level command by the
+       end user, to be recorded in the body of the reflog.
+
+`GIT_REF_PARANOIA`::
+       If set to `1`, include broken or badly named refs when iterating
+       over lists of refs. In a normal, non-corrupted repository, this
+       does nothing. However, enabling it may help git to detect and
+       abort some operations in the presence of broken refs. Git sets
+       this variable automatically when performing destructive
+       operations like linkgit:git-prune[1]. You should not need to set
+       it yourself unless you want to be paranoid about making sure
+       an operation has touched every ref (e.g., because you are
+       cloning a repository to make a backup).
+
+`GIT_ALLOW_PROTOCOL`::
+       If set to a colon-separated list of protocols, behave as if
+       `protocol.allow` is set to `never`, and each of the listed
+       protocols has `protocol.<name>.allow` set to `always`
+       (overriding any existing configuration). In other words, any
+       protocol not mentioned will be disallowed (i.e., this is a
+       whitelist, not a blacklist). See the description of
+       `protocol.allow` in linkgit:git-config[1] for more details.
+
+`GIT_PROTOCOL_FROM_USER`::
+       Set to 0 to prevent protocols used by fetch/push/clone which are
+       configured to the `user` state.  This is useful to restrict recursive
+       submodule initialization from an untrusted repository or for programs
+       which feed potentially-untrusted URLS to git commands.  See
+       linkgit:git-config[1] for more details.
 
 Discussion[[Discussion]]
 ------------------------
 
 More detail on the following is available from the
-link:user-manual.html#git-concepts[git concepts chapter of the
+link:user-manual.html#git-concepts[Git concepts chapter of the
 user-manual] and linkgit:gitcore-tutorial[7].
 
-A git project normally consists of a working directory with a ".git"
+A Git project normally consists of a working directory with a ".git"
 subdirectory at the top level.  The .git directory contains, among other
 things, a compressed object database representing the complete history
 of the project, an "index" file which links that history to the current
@@ -829,7 +1214,7 @@ The commit, equivalent to what other systems call a "changeset" or
 represents an immediately preceding step.  Commits with more than one
 parent represent merges of independent lines of development.
 
-All objects are named by the SHA1 hash of their contents, normally
+All objects are named by the SHA-1 hash of their contents, normally
 written as a string of 40 hex digits.  Such names are globally unique.
 The entire history leading up to a commit can be vouched for by signing
 just that commit.  A fourth object type, the tag, is provided for this
@@ -839,9 +1224,9 @@ When first created, objects are stored in individual files, but for
 efficiency may later be compressed together into "pack files".
 
 Named pointers called refs mark interesting points in history.  A ref
-may contain the SHA1 name of an object or the name of another ref.  Refs
-with names beginning `ref/head/` contain the SHA1 name of the most
-recent commit (or "head") of a branch under development.  SHA1 names of
+may contain the SHA-1 name of an object or the name of another ref.  Refs
+with names beginning `ref/head/` contain the SHA-1 name of the most
+recent commit (or "head") of a branch under development.  SHA-1 names of
 tags of interest are stored under `ref/tags/`.  A special ref named
 `HEAD` contains the name of the currently checked-out branch.
 
@@ -862,12 +1247,12 @@ FURTHER DOCUMENTATION
 ---------------------
 
 See the references in the "description" section to get started
-using git.  The following is probably more detail than necessary
+using Git.  The following is probably more detail than necessary
 for a first-time user.
 
-The link:user-manual.html#git-concepts[git concepts chapter of the
+The link:user-manual.html#git-concepts[Git concepts chapter of the
 user-manual] and linkgit:gitcore-tutorial[7] both provide
-introductions to the underlying git architecture.
+introductions to the underlying Git architecture.
 
 See linkgit:gitworkflows[7] for an overview of recommended workflows.
 
@@ -875,7 +1260,7 @@ See also the link:howto-index.html[howto] documents for some useful
 examples.
 
 The internals are documented in the
-link:technical/api-index.html[GIT API documentation].
+link:technical/api-index.html[Git API documentation].
 
 Users migrating from CVS may also want to
 read linkgit:gitcvs-migration[7].
@@ -884,8 +1269,8 @@ read linkgit:gitcvs-migration[7].
 Authors
 -------
 Git was started by Linus Torvalds, and is currently maintained by Junio
-C Hamano. Numerous contributions have come from the git mailing list
-<git@vger.kernel.org>.  http://www.ohloh.net/p/git/contributors/summary
+C Hamano. Numerous contributions have come from the Git mailing list
+<git@vger.kernel.org>.  http://www.openhub.net/p/git/contributors/summary
 gives you a more complete list of contributors.
 
 If you have a clone of git.git itself, the
@@ -902,7 +1287,7 @@ subscribed to the list to send a message there.
 SEE ALSO
 --------
 linkgit:gittutorial[7], linkgit:gittutorial-2[7],
-link:everyday.html[Everyday Git], linkgit:gitcvs-migration[7],
+linkgit:giteveryday[7], linkgit:gitcvs-migration[7],
 linkgit:gitglossary[7], linkgit:gitcore-tutorial[7],
 linkgit:gitcli[7], link:user-manual.html[The Git User's Manual],
 linkgit:gitworkflows[7]