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