Documentation / git.txton commit completion: add and use --list-cmds=alias (3301d36)
   1git(1)
   2======
   3
   4NAME
   5----
   6git - the stupid content tracker
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git' [--version] [--help] [-C <path>] [-c <name>=<value>]
  13    [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
  14    [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
  15    [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
  16    [--super-prefix=<path>]
  17    <command> [<args>]
  18
  19DESCRIPTION
  20-----------
  21Git is a fast, scalable, distributed revision control system with an
  22unusually rich command set that provides both high-level operations
  23and full access to internals.
  24
  25See linkgit:gittutorial[7] to get started, then see
  26linkgit:giteveryday[7] for a useful minimum set of
  27commands.  The link:user-manual.html[Git User's Manual] has a more
  28in-depth introduction.
  29
  30After you mastered the basic concepts, you can come back to this
  31page to learn what commands Git offers.  You can learn more about
  32individual Git commands with "git help command".  linkgit:gitcli[7]
  33manual page gives you an overview of the command-line command syntax.
  34
  35A formatted and hyperlinked copy of the latest Git documentation
  36can be viewed at `https://git.github.io/htmldocs/git.html`.
  37
  38
  39OPTIONS
  40-------
  41--version::
  42        Prints the Git suite version that the 'git' program came from.
  43
  44--help::
  45        Prints the synopsis and a list of the most commonly used
  46        commands. If the option `--all` or `-a` is given then all
  47        available commands are printed. If a Git command is named this
  48        option will bring up the manual page for that command.
  49+
  50Other options are available to control how the manual page is
  51displayed. See linkgit:git-help[1] for more information,
  52because `git --help ...` is converted internally into `git
  53help ...`.
  54
  55-C <path>::
  56        Run as if git was started in '<path>' instead of the current working
  57        directory.  When multiple `-C` options are given, each subsequent
  58        non-absolute `-C <path>` is interpreted relative to the preceding `-C
  59        <path>`.
  60+
  61This option affects options that expect path name like `--git-dir` and
  62`--work-tree` in that their interpretations of the path names would be
  63made relative to the working directory caused by the `-C` option. For
  64example the following invocations are equivalent:
  65
  66    git --git-dir=a.git --work-tree=b -C c status
  67    git --git-dir=c/a.git --work-tree=c/b status
  68
  69-c <name>=<value>::
  70        Pass a configuration parameter to the command. The value
  71        given will override values from configuration files.
  72        The <name> is expected in the same format as listed by
  73        'git config' (subkeys separated by dots).
  74+
  75Note that omitting the `=` in `git -c foo.bar ...` is allowed and sets
  76`foo.bar` to the boolean true value (just like `[foo]bar` would in a
  77config file). Including the equals but with an empty value (like `git -c
  78foo.bar= ...`) sets `foo.bar` to the empty string which `git config
  79--bool` will convert to `false`.
  80
  81--exec-path[=<path>]::
  82        Path to wherever your core Git programs are installed.
  83        This can also be controlled by setting the GIT_EXEC_PATH
  84        environment variable. If no path is given, 'git' will print
  85        the current setting and then exit.
  86
  87--html-path::
  88        Print the path, without trailing slash, where Git's HTML
  89        documentation is installed and exit.
  90
  91--man-path::
  92        Print the manpath (see `man(1)`) for the man pages for
  93        this version of Git and exit.
  94
  95--info-path::
  96        Print the path where the Info files documenting this
  97        version of Git are installed and exit.
  98
  99-p::
 100--paginate::
 101        Pipe all output into 'less' (or if set, $PAGER) if standard
 102        output is a terminal.  This overrides the `pager.<cmd>`
 103        configuration options (see the "Configuration Mechanism" section
 104        below).
 105
 106--no-pager::
 107        Do not pipe Git output into a pager.
 108
 109--git-dir=<path>::
 110        Set the path to the repository. This can also be controlled by
 111        setting the `GIT_DIR` environment variable. It can be an absolute
 112        path or relative path to current working directory.
 113
 114--work-tree=<path>::
 115        Set the path to the working tree. It can be an absolute path
 116        or a path relative to the current working directory.
 117        This can also be controlled by setting the GIT_WORK_TREE
 118        environment variable and the core.worktree configuration
 119        variable (see core.worktree in linkgit:git-config[1] for a
 120        more detailed discussion).
 121
 122--namespace=<path>::
 123        Set the Git namespace.  See linkgit:gitnamespaces[7] for more
 124        details.  Equivalent to setting the `GIT_NAMESPACE` environment
 125        variable.
 126
 127--super-prefix=<path>::
 128        Currently for internal use only.  Set a prefix which gives a path from
 129        above a repository down to its root.  One use is to give submodules
 130        context about the superproject that invoked it.
 131
 132--bare::
 133        Treat the repository as a bare repository.  If GIT_DIR
 134        environment is not set, it is set to the current working
 135        directory.
 136
 137--no-replace-objects::
 138        Do not use replacement refs to replace Git objects. See
 139        linkgit:git-replace[1] for more information.
 140
 141--literal-pathspecs::
 142        Treat pathspecs literally (i.e. no globbing, no pathspec magic).
 143        This is equivalent to setting the `GIT_LITERAL_PATHSPECS` environment
 144        variable to `1`.
 145
 146--glob-pathspecs::
 147        Add "glob" magic to all pathspec. This is equivalent to setting
 148        the `GIT_GLOB_PATHSPECS` environment variable to `1`. Disabling
 149        globbing on individual pathspecs can be done using pathspec
 150        magic ":(literal)"
 151
 152--noglob-pathspecs::
 153        Add "literal" magic to all pathspec. This is equivalent to setting
 154        the `GIT_NOGLOB_PATHSPECS` environment variable to `1`. Enabling
 155        globbing on individual pathspecs can be done using pathspec
 156        magic ":(glob)"
 157
 158--icase-pathspecs::
 159        Add "icase" magic to all pathspec. This is equivalent to setting
 160        the `GIT_ICASE_PATHSPECS` environment variable to `1`.
 161
 162--no-optional-locks::
 163        Do not perform optional operations that require locks. This is
 164        equivalent to setting the `GIT_OPTIONAL_LOCKS` to `0`.
 165
 166--list-cmds=group[,group...]::
 167        List commands by group. This is an internal/experimental
 168        option and may change or be removed in the future. Supported
 169        groups are: builtins, parseopt (builtin commands that use
 170        parse-options), main (all commands in libexec directory),
 171        others (all other commands in `$PATH` that have git- prefix),
 172        list-<category> (see categories in command-list.txt),
 173        nohelpers (exclude helper commands) and alias.
 174
 175GIT COMMANDS
 176------------
 177
 178We divide Git into high level ("porcelain") commands and low level
 179("plumbing") commands.
 180
 181High-level commands (porcelain)
 182-------------------------------
 183
 184We separate the porcelain commands into the main commands and some
 185ancillary user utilities.
 186
 187Main porcelain commands
 188~~~~~~~~~~~~~~~~~~~~~~~
 189
 190include::cmds-mainporcelain.txt[]
 191
 192Ancillary Commands
 193~~~~~~~~~~~~~~~~~~
 194Manipulators:
 195
 196include::cmds-ancillarymanipulators.txt[]
 197
 198Interrogators:
 199
 200include::cmds-ancillaryinterrogators.txt[]
 201
 202
 203Interacting with Others
 204~~~~~~~~~~~~~~~~~~~~~~~
 205
 206These commands are to interact with foreign SCM and with other
 207people via patch over e-mail.
 208
 209include::cmds-foreignscminterface.txt[]
 210
 211
 212Low-level commands (plumbing)
 213-----------------------------
 214
 215Although Git includes its
 216own porcelain layer, its low-level commands are sufficient to support
 217development of alternative porcelains.  Developers of such porcelains
 218might start by reading about linkgit:git-update-index[1] and
 219linkgit:git-read-tree[1].
 220
 221The interface (input, output, set of options and the semantics)
 222to these low-level commands are meant to be a lot more stable
 223than Porcelain level commands, because these commands are
 224primarily for scripted use.  The interface to Porcelain commands
 225on the other hand are subject to change in order to improve the
 226end user experience.
 227
 228The following description divides
 229the low-level commands into commands that manipulate objects (in
 230the repository, index, and working tree), commands that interrogate and
 231compare objects, and commands that move objects and references between
 232repositories.
 233
 234
 235Manipulation commands
 236~~~~~~~~~~~~~~~~~~~~~
 237
 238include::cmds-plumbingmanipulators.txt[]
 239
 240
 241Interrogation commands
 242~~~~~~~~~~~~~~~~~~~~~~
 243
 244include::cmds-plumbinginterrogators.txt[]
 245
 246In general, the interrogate commands do not touch the files in
 247the working tree.
 248
 249
 250Synching repositories
 251~~~~~~~~~~~~~~~~~~~~~
 252
 253include::cmds-synchingrepositories.txt[]
 254
 255The following are helper commands used by the above; end users
 256typically do not use them directly.
 257
 258include::cmds-synchelpers.txt[]
 259
 260
 261Internal helper commands
 262~~~~~~~~~~~~~~~~~~~~~~~~
 263
 264These are internal helper commands used by other commands; end
 265users typically do not use them directly.
 266
 267include::cmds-purehelpers.txt[]
 268
 269
 270Configuration Mechanism
 271-----------------------
 272
 273Git uses a simple text format to store customizations that are per
 274repository and are per user.  Such a configuration file may look
 275like this:
 276
 277------------
 278#
 279# A '#' or ';' character indicates a comment.
 280#
 281
 282; core variables
 283[core]
 284        ; Don't trust file modes
 285        filemode = false
 286
 287; user identity
 288[user]
 289        name = "Junio C Hamano"
 290        email = "gitster@pobox.com"
 291
 292------------
 293
 294Various commands read from the configuration file and adjust
 295their operation accordingly.  See linkgit:git-config[1] for a
 296list and more details about the configuration mechanism.
 297
 298
 299Identifier Terminology
 300----------------------
 301<object>::
 302        Indicates the object name for any type of object.
 303
 304<blob>::
 305        Indicates a blob object name.
 306
 307<tree>::
 308        Indicates a tree object name.
 309
 310<commit>::
 311        Indicates a commit object name.
 312
 313<tree-ish>::
 314        Indicates a tree, commit or tag object name.  A
 315        command that takes a <tree-ish> argument ultimately wants to
 316        operate on a <tree> object but automatically dereferences
 317        <commit> and <tag> objects that point at a <tree>.
 318
 319<commit-ish>::
 320        Indicates a commit or tag object name.  A
 321        command that takes a <commit-ish> argument ultimately wants to
 322        operate on a <commit> object but automatically dereferences
 323        <tag> objects that point at a <commit>.
 324
 325<type>::
 326        Indicates that an object type is required.
 327        Currently one of: `blob`, `tree`, `commit`, or `tag`.
 328
 329<file>::
 330        Indicates a filename - almost always relative to the
 331        root of the tree structure `GIT_INDEX_FILE` describes.
 332
 333Symbolic Identifiers
 334--------------------
 335Any Git command accepting any <object> can also use the following
 336symbolic notation:
 337
 338HEAD::
 339        indicates the head of the current branch.
 340
 341<tag>::
 342        a valid tag 'name'
 343        (i.e. a `refs/tags/<tag>` reference).
 344
 345<head>::
 346        a valid head 'name'
 347        (i.e. a `refs/heads/<head>` reference).
 348
 349For a more complete list of ways to spell object names, see
 350"SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].
 351
 352
 353File/Directory Structure
 354------------------------
 355
 356Please see the linkgit:gitrepository-layout[5] document.
 357
 358Read linkgit:githooks[5] for more details about each hook.
 359
 360Higher level SCMs may provide and manage additional information in the
 361`$GIT_DIR`.
 362
 363
 364Terminology
 365-----------
 366Please see linkgit:gitglossary[7].
 367
 368
 369Environment Variables
 370---------------------
 371Various Git commands use the following environment variables:
 372
 373The Git Repository
 374~~~~~~~~~~~~~~~~~~
 375These environment variables apply to 'all' core Git commands. Nb: it
 376is worth noting that they may be used/overridden by SCMS sitting above
 377Git so take care if using a foreign front-end.
 378
 379`GIT_INDEX_FILE`::
 380        This environment allows the specification of an alternate
 381        index file. If not specified, the default of `$GIT_DIR/index`
 382        is used.
 383
 384`GIT_INDEX_VERSION`::
 385        This environment variable allows the specification of an index
 386        version for new repositories.  It won't affect existing index
 387        files.  By default index file version 2 or 3 is used. See
 388        linkgit:git-update-index[1] for more information.
 389
 390`GIT_OBJECT_DIRECTORY`::
 391        If the object storage directory is specified via this
 392        environment variable then the sha1 directories are created
 393        underneath - otherwise the default `$GIT_DIR/objects`
 394        directory is used.
 395
 396`GIT_ALTERNATE_OBJECT_DIRECTORIES`::
 397        Due to the immutable nature of Git objects, old objects can be
 398        archived into shared, read-only directories. This variable
 399        specifies a ":" separated (on Windows ";" separated) list
 400        of Git object directories which can be used to search for Git
 401        objects. New objects will not be written to these directories.
 402+
 403        Entries that begin with `"` (double-quote) will be interpreted
 404        as C-style quoted paths, removing leading and trailing
 405        double-quotes and respecting backslash escapes. E.g., the value
 406        `"path-with-\"-and-:-in-it":vanilla-path` has two paths:
 407        `path-with-"-and-:-in-it` and `vanilla-path`.
 408
 409`GIT_DIR`::
 410        If the `GIT_DIR` environment variable is set then it
 411        specifies a path to use instead of the default `.git`
 412        for the base of the repository.
 413        The `--git-dir` command-line option also sets this value.
 414
 415`GIT_WORK_TREE`::
 416        Set the path to the root of the working tree.
 417        This can also be controlled by the `--work-tree` command-line
 418        option and the core.worktree configuration variable.
 419
 420`GIT_NAMESPACE`::
 421        Set the Git namespace; see linkgit:gitnamespaces[7] for details.
 422        The `--namespace` command-line option also sets this value.
 423
 424`GIT_CEILING_DIRECTORIES`::
 425        This should be a colon-separated list of absolute paths.  If
 426        set, it is a list of directories that Git should not chdir up
 427        into while looking for a repository directory (useful for
 428        excluding slow-loading network directories).  It will not
 429        exclude the current working directory or a GIT_DIR set on the
 430        command line or in the environment.  Normally, Git has to read
 431        the entries in this list and resolve any symlink that
 432        might be present in order to compare them with the current
 433        directory.  However, if even this access is slow, you
 434        can add an empty entry to the list to tell Git that the
 435        subsequent entries are not symlinks and needn't be resolved;
 436        e.g.,
 437        `GIT_CEILING_DIRECTORIES=/maybe/symlink::/very/slow/non/symlink`.
 438
 439`GIT_DISCOVERY_ACROSS_FILESYSTEM`::
 440        When run in a directory that does not have ".git" repository
 441        directory, Git tries to find such a directory in the parent
 442        directories to find the top of the working tree, but by default it
 443        does not cross filesystem boundaries.  This environment variable
 444        can be set to true to tell Git not to stop at filesystem
 445        boundaries.  Like `GIT_CEILING_DIRECTORIES`, this will not affect
 446        an explicit repository directory set via `GIT_DIR` or on the
 447        command line.
 448
 449`GIT_COMMON_DIR`::
 450        If this variable is set to a path, non-worktree files that are
 451        normally in $GIT_DIR will be taken from this path
 452        instead. Worktree-specific files such as HEAD or index are
 453        taken from $GIT_DIR. See linkgit:gitrepository-layout[5] and
 454        linkgit:git-worktree[1] for
 455        details. This variable has lower precedence than other path
 456        variables such as GIT_INDEX_FILE, GIT_OBJECT_DIRECTORY...
 457
 458Git Commits
 459~~~~~~~~~~~
 460`GIT_AUTHOR_NAME`::
 461`GIT_AUTHOR_EMAIL`::
 462`GIT_AUTHOR_DATE`::
 463`GIT_COMMITTER_NAME`::
 464`GIT_COMMITTER_EMAIL`::
 465`GIT_COMMITTER_DATE`::
 466'EMAIL'::
 467        see linkgit:git-commit-tree[1]
 468
 469Git Diffs
 470~~~~~~~~~
 471`GIT_DIFF_OPTS`::
 472        Only valid setting is "--unified=??" or "-u??" to set the
 473        number of context lines shown when a unified diff is created.
 474        This takes precedence over any "-U" or "--unified" option
 475        value passed on the Git diff command line.
 476
 477`GIT_EXTERNAL_DIFF`::
 478        When the environment variable `GIT_EXTERNAL_DIFF` is set, the
 479        program named by it is called, instead of the diff invocation
 480        described above.  For a path that is added, removed, or modified,
 481        `GIT_EXTERNAL_DIFF` is called with 7 parameters:
 482
 483        path old-file old-hex old-mode new-file new-hex new-mode
 484+
 485where:
 486
 487        <old|new>-file:: are files GIT_EXTERNAL_DIFF can use to read the
 488                         contents of <old|new>,
 489        <old|new>-hex:: are the 40-hexdigit SHA-1 hashes,
 490        <old|new>-mode:: are the octal representation of the file modes.
 491+
 492The file parameters can point at the user's working file
 493(e.g. `new-file` in "git-diff-files"), `/dev/null` (e.g. `old-file`
 494when a new file is added), or a temporary file (e.g. `old-file` in the
 495index).  `GIT_EXTERNAL_DIFF` should not worry about unlinking the
 496temporary file --- it is removed when `GIT_EXTERNAL_DIFF` exits.
 497+
 498For a path that is unmerged, `GIT_EXTERNAL_DIFF` is called with 1
 499parameter, <path>.
 500+
 501For each path `GIT_EXTERNAL_DIFF` is called, two environment variables,
 502`GIT_DIFF_PATH_COUNTER` and `GIT_DIFF_PATH_TOTAL` are set.
 503
 504`GIT_DIFF_PATH_COUNTER`::
 505        A 1-based counter incremented by one for every path.
 506
 507`GIT_DIFF_PATH_TOTAL`::
 508        The total number of paths.
 509
 510other
 511~~~~~
 512`GIT_MERGE_VERBOSITY`::
 513        A number controlling the amount of output shown by
 514        the recursive merge strategy.  Overrides merge.verbosity.
 515        See linkgit:git-merge[1]
 516
 517`GIT_PAGER`::
 518        This environment variable overrides `$PAGER`. If it is set
 519        to an empty string or to the value "cat", Git will not launch
 520        a pager.  See also the `core.pager` option in
 521        linkgit:git-config[1].
 522
 523`GIT_EDITOR`::
 524        This environment variable overrides `$EDITOR` and `$VISUAL`.
 525        It is used by several Git commands when, on interactive mode,
 526        an editor is to be launched. See also linkgit:git-var[1]
 527        and the `core.editor` option in linkgit:git-config[1].
 528
 529`GIT_SSH`::
 530`GIT_SSH_COMMAND`::
 531        If either of these environment variables is set then 'git fetch'
 532        and 'git push' will use the specified command instead of 'ssh'
 533        when they need to connect to a remote system.
 534        The command-line parameters passed to the configured command are
 535        determined by the ssh variant.  See `ssh.variant` option in
 536        linkgit:git-config[1] for details.
 537
 538+
 539`$GIT_SSH_COMMAND` takes precedence over `$GIT_SSH`, and is interpreted
 540by the shell, which allows additional arguments to be included.
 541`$GIT_SSH` on the other hand must be just the path to a program
 542(which can be a wrapper shell script, if additional arguments are
 543needed).
 544+
 545Usually it is easier to configure any desired options through your
 546personal `.ssh/config` file.  Please consult your ssh documentation
 547for further details.
 548
 549`GIT_SSH_VARIANT`::
 550        If this environment variable is set, it overrides Git's autodetection
 551        whether `GIT_SSH`/`GIT_SSH_COMMAND`/`core.sshCommand` refer to OpenSSH,
 552        plink or tortoiseplink. This variable overrides the config setting
 553        `ssh.variant` that serves the same purpose.
 554
 555`GIT_ASKPASS`::
 556        If this environment variable is set, then Git commands which need to
 557        acquire passwords or passphrases (e.g. for HTTP or IMAP authentication)
 558        will call this program with a suitable prompt as command-line argument
 559        and read the password from its STDOUT. See also the `core.askPass`
 560        option in linkgit:git-config[1].
 561
 562`GIT_TERMINAL_PROMPT`::
 563        If this environment variable is set to `0`, git will not prompt
 564        on the terminal (e.g., when asking for HTTP authentication).
 565
 566`GIT_CONFIG_NOSYSTEM`::
 567        Whether to skip reading settings from the system-wide
 568        `$(prefix)/etc/gitconfig` file.  This environment variable can
 569        be used along with `$HOME` and `$XDG_CONFIG_HOME` to create a
 570        predictable environment for a picky script, or you can set it
 571        temporarily to avoid using a buggy `/etc/gitconfig` file while
 572        waiting for someone with sufficient permissions to fix it.
 573
 574`GIT_FLUSH`::
 575        If this environment variable is set to "1", then commands such
 576        as 'git blame' (in incremental mode), 'git rev-list', 'git log',
 577        'git check-attr' and 'git check-ignore' will
 578        force a flush of the output stream after each record have been
 579        flushed. If this
 580        variable is set to "0", the output of these commands will be done
 581        using completely buffered I/O.   If this environment variable is
 582        not set, Git will choose buffered or record-oriented flushing
 583        based on whether stdout appears to be redirected to a file or not.
 584
 585`GIT_TRACE`::
 586        Enables general trace messages, e.g. alias expansion, built-in
 587        command execution and external command execution.
 588+
 589If this variable is set to "1", "2" or "true" (comparison
 590is case insensitive), trace messages will be printed to
 591stderr.
 592+
 593If the variable is set to an integer value greater than 2
 594and lower than 10 (strictly) then Git will interpret this
 595value as an open file descriptor and will try to write the
 596trace messages into this file descriptor.
 597+
 598Alternatively, if the variable is set to an absolute path
 599(starting with a '/' character), Git will interpret this
 600as a file path and will try to write the trace messages
 601into it.
 602+
 603Unsetting the variable, or setting it to empty, "0" or
 604"false" (case insensitive) disables trace messages.
 605
 606`GIT_TRACE_FSMONITOR`::
 607        Enables trace messages for the filesystem monitor extension.
 608        See `GIT_TRACE` for available trace output options.
 609
 610`GIT_TRACE_PACK_ACCESS`::
 611        Enables trace messages for all accesses to any packs. For each
 612        access, the pack file name and an offset in the pack is
 613        recorded. This may be helpful for troubleshooting some
 614        pack-related performance problems.
 615        See `GIT_TRACE` for available trace output options.
 616
 617`GIT_TRACE_PACKET`::
 618        Enables trace messages for all packets coming in or out of a
 619        given program. This can help with debugging object negotiation
 620        or other protocol issues. Tracing is turned off at a packet
 621        starting with "PACK" (but see `GIT_TRACE_PACKFILE` below).
 622        See `GIT_TRACE` for available trace output options.
 623
 624`GIT_TRACE_PACKFILE`::
 625        Enables tracing of packfiles sent or received by a
 626        given program. Unlike other trace output, this trace is
 627        verbatim: no headers, and no quoting of binary data. You almost
 628        certainly want to direct into a file (e.g.,
 629        `GIT_TRACE_PACKFILE=/tmp/my.pack`) rather than displaying it on
 630        the terminal or mixing it with other trace output.
 631+
 632Note that this is currently only implemented for the client side
 633of clones and fetches.
 634
 635`GIT_TRACE_PERFORMANCE`::
 636        Enables performance related trace messages, e.g. total execution
 637        time of each Git command.
 638        See `GIT_TRACE` for available trace output options.
 639
 640`GIT_TRACE_SETUP`::
 641        Enables trace messages printing the .git, working tree and current
 642        working directory after Git has completed its setup phase.
 643        See `GIT_TRACE` for available trace output options.
 644
 645`GIT_TRACE_SHALLOW`::
 646        Enables trace messages that can help debugging fetching /
 647        cloning of shallow repositories.
 648        See `GIT_TRACE` for available trace output options.
 649
 650`GIT_TRACE_CURL`::
 651        Enables a curl full trace dump of all incoming and outgoing data,
 652        including descriptive information, of the git transport protocol.
 653        This is similar to doing curl `--trace-ascii` on the command line.
 654        This option overrides setting the `GIT_CURL_VERBOSE` environment
 655        variable.
 656        See `GIT_TRACE` for available trace output options.
 657
 658`GIT_TRACE_CURL_NO_DATA`::
 659        When a curl trace is enabled (see `GIT_TRACE_CURL` above), do not dump
 660        data (that is, only dump info lines and headers).
 661
 662`GIT_REDACT_COOKIES`::
 663        This can be set to a comma-separated list of strings. When a curl trace
 664        is enabled (see `GIT_TRACE_CURL` above), whenever a "Cookies:" header
 665        sent by the client is dumped, values of cookies whose key is in that
 666        list (case-sensitive) are redacted.
 667
 668`GIT_LITERAL_PATHSPECS`::
 669        Setting this variable to `1` will cause Git to treat all
 670        pathspecs literally, rather than as glob patterns. For example,
 671        running `GIT_LITERAL_PATHSPECS=1 git log -- '*.c'` will search
 672        for commits that touch the path `*.c`, not any paths that the
 673        glob `*.c` matches. You might want this if you are feeding
 674        literal paths to Git (e.g., paths previously given to you by
 675        `git ls-tree`, `--raw` diff output, etc).
 676
 677`GIT_GLOB_PATHSPECS`::
 678        Setting this variable to `1` will cause Git to treat all
 679        pathspecs as glob patterns (aka "glob" magic).
 680
 681`GIT_NOGLOB_PATHSPECS`::
 682        Setting this variable to `1` will cause Git to treat all
 683        pathspecs as literal (aka "literal" magic).
 684
 685`GIT_ICASE_PATHSPECS`::
 686        Setting this variable to `1` will cause Git to treat all
 687        pathspecs as case-insensitive.
 688
 689`GIT_REFLOG_ACTION`::
 690        When a ref is updated, reflog entries are created to keep
 691        track of the reason why the ref was updated (which is
 692        typically the name of the high-level command that updated
 693        the ref), in addition to the old and new values of the ref.
 694        A scripted Porcelain command can use set_reflog_action
 695        helper function in `git-sh-setup` to set its name to this
 696        variable when it is invoked as the top level command by the
 697        end user, to be recorded in the body of the reflog.
 698
 699`GIT_REF_PARANOIA`::
 700        If set to `1`, include broken or badly named refs when iterating
 701        over lists of refs. In a normal, non-corrupted repository, this
 702        does nothing. However, enabling it may help git to detect and
 703        abort some operations in the presence of broken refs. Git sets
 704        this variable automatically when performing destructive
 705        operations like linkgit:git-prune[1]. You should not need to set
 706        it yourself unless you want to be paranoid about making sure
 707        an operation has touched every ref (e.g., because you are
 708        cloning a repository to make a backup).
 709
 710`GIT_ALLOW_PROTOCOL`::
 711        If set to a colon-separated list of protocols, behave as if
 712        `protocol.allow` is set to `never`, and each of the listed
 713        protocols has `protocol.<name>.allow` set to `always`
 714        (overriding any existing configuration). In other words, any
 715        protocol not mentioned will be disallowed (i.e., this is a
 716        whitelist, not a blacklist). See the description of
 717        `protocol.allow` in linkgit:git-config[1] for more details.
 718
 719`GIT_PROTOCOL_FROM_USER`::
 720        Set to 0 to prevent protocols used by fetch/push/clone which are
 721        configured to the `user` state.  This is useful to restrict recursive
 722        submodule initialization from an untrusted repository or for programs
 723        which feed potentially-untrusted URLS to git commands.  See
 724        linkgit:git-config[1] for more details.
 725
 726`GIT_PROTOCOL`::
 727        For internal use only.  Used in handshaking the wire protocol.
 728        Contains a colon ':' separated list of keys with optional values
 729        'key[=value]'.  Presence of unknown keys and values must be
 730        ignored.
 731
 732`GIT_OPTIONAL_LOCKS`::
 733        If set to `0`, Git will complete any requested operation without
 734        performing any optional sub-operations that require taking a lock.
 735        For example, this will prevent `git status` from refreshing the
 736        index as a side effect. This is useful for processes running in
 737        the background which do not want to cause lock contention with
 738        other operations on the repository.  Defaults to `1`.
 739
 740`GIT_REDIRECT_STDIN`::
 741`GIT_REDIRECT_STDOUT`::
 742`GIT_REDIRECT_STDERR`::
 743        Windows-only: allow redirecting the standard input/output/error
 744        handles to paths specified by the environment variables. This is
 745        particularly useful in multi-threaded applications where the
 746        canonical way to pass standard handles via `CreateProcess()` is
 747        not an option because it would require the handles to be marked
 748        inheritable (and consequently *every* spawned process would
 749        inherit them, possibly blocking regular Git operations). The
 750        primary intended use case is to use named pipes for communication
 751        (e.g. `\\.\pipe\my-git-stdin-123`).
 752+
 753Two special values are supported: `off` will simply close the
 754corresponding standard handle, and if `GIT_REDIRECT_STDERR` is
 755`2>&1`, standard error will be redirected to the same handle as
 756standard output.
 757
 758`GIT_PRINT_SHA1_ELLIPSIS` (deprecated)::
 759        If set to `yes`, print an ellipsis following an
 760        (abbreviated) SHA-1 value.  This affects indications of
 761        detached HEADs (linkgit:git-checkout[1]) and the raw
 762        diff output (linkgit:git-diff[1]).  Printing an
 763        ellipsis in the cases mentioned is no longer considered
 764        adequate and support for it is likely to be removed in the
 765        foreseeable future (along with the variable).
 766
 767Discussion[[Discussion]]
 768------------------------
 769
 770More detail on the following is available from the
 771link:user-manual.html#git-concepts[Git concepts chapter of the
 772user-manual] and linkgit:gitcore-tutorial[7].
 773
 774A Git project normally consists of a working directory with a ".git"
 775subdirectory at the top level.  The .git directory contains, among other
 776things, a compressed object database representing the complete history
 777of the project, an "index" file which links that history to the current
 778contents of the working tree, and named pointers into that history such
 779as tags and branch heads.
 780
 781The object database contains objects of three main types: blobs, which
 782hold file data; trees, which point to blobs and other trees to build up
 783directory hierarchies; and commits, which each reference a single tree
 784and some number of parent commits.
 785
 786The commit, equivalent to what other systems call a "changeset" or
 787"version", represents a step in the project's history, and each parent
 788represents an immediately preceding step.  Commits with more than one
 789parent represent merges of independent lines of development.
 790
 791All objects are named by the SHA-1 hash of their contents, normally
 792written as a string of 40 hex digits.  Such names are globally unique.
 793The entire history leading up to a commit can be vouched for by signing
 794just that commit.  A fourth object type, the tag, is provided for this
 795purpose.
 796
 797When first created, objects are stored in individual files, but for
 798efficiency may later be compressed together into "pack files".
 799
 800Named pointers called refs mark interesting points in history.  A ref
 801may contain the SHA-1 name of an object or the name of another ref.  Refs
 802with names beginning `ref/head/` contain the SHA-1 name of the most
 803recent commit (or "head") of a branch under development.  SHA-1 names of
 804tags of interest are stored under `ref/tags/`.  A special ref named
 805`HEAD` contains the name of the currently checked-out branch.
 806
 807The index file is initialized with a list of all paths and, for each
 808path, a blob object and a set of attributes.  The blob object represents
 809the contents of the file as of the head of the current branch.  The
 810attributes (last modified time, size, etc.) are taken from the
 811corresponding file in the working tree.  Subsequent changes to the
 812working tree can be found by comparing these attributes.  The index may
 813be updated with new content, and new commits may be created from the
 814content stored in the index.
 815
 816The index is also capable of storing multiple entries (called "stages")
 817for a given pathname.  These stages are used to hold the various
 818unmerged version of a file when a merge is in progress.
 819
 820FURTHER DOCUMENTATION
 821---------------------
 822
 823See the references in the "description" section to get started
 824using Git.  The following is probably more detail than necessary
 825for a first-time user.
 826
 827The link:user-manual.html#git-concepts[Git concepts chapter of the
 828user-manual] and linkgit:gitcore-tutorial[7] both provide
 829introductions to the underlying Git architecture.
 830
 831See linkgit:gitworkflows[7] for an overview of recommended workflows.
 832
 833See also the link:howto-index.html[howto] documents for some useful
 834examples.
 835
 836The internals are documented in the
 837link:technical/api-index.html[Git API documentation].
 838
 839Users migrating from CVS may also want to
 840read linkgit:gitcvs-migration[7].
 841
 842
 843Authors
 844-------
 845Git was started by Linus Torvalds, and is currently maintained by Junio
 846C Hamano. Numerous contributions have come from the Git mailing list
 847<git@vger.kernel.org>.  http://www.openhub.net/p/git/contributors/summary
 848gives you a more complete list of contributors.
 849
 850If you have a clone of git.git itself, the
 851output of linkgit:git-shortlog[1] and linkgit:git-blame[1] can show you
 852the authors for specific parts of the project.
 853
 854Reporting Bugs
 855--------------
 856
 857Report bugs to the Git mailing list <git@vger.kernel.org> where the
 858development and maintenance is primarily done.  You do not have to be
 859subscribed to the list to send a message there.
 860
 861Issues which are security relevant should be disclosed privately to
 862the Git Security mailing list <git-security@googlegroups.com>.
 863
 864SEE ALSO
 865--------
 866linkgit:gittutorial[7], linkgit:gittutorial-2[7],
 867linkgit:giteveryday[7], linkgit:gitcvs-migration[7],
 868linkgit:gitglossary[7], linkgit:gitcore-tutorial[7],
 869linkgit:gitcli[7], link:user-manual.html[The Git User's Manual],
 870linkgit:gitworkflows[7]
 871
 872GIT
 873---
 874Part of the linkgit:git[1] suite