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