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