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