]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-config.txt
Merge branch 'es/perf-export-fix'
[thirdparty/git.git] / Documentation / git-config.txt
CommitLineData
e0d10e1c
TP
1git-config(1)
2=============
3
4NAME
5----
6git-config - Get and set repository or global options
7
8
9SYNOPSIS
10--------
11[verse]
fda43942 12'git config' [<file-option>] [--type=<type>] [--fixed-value] [--show-origin] [--show-scope] [-z|--null] name [value [value-pattern]]
fb0dc3ba 13'git config' [<file-option>] [--type=<type>] --add name value
fda43942
DS
14'git config' [<file-option>] [--type=<type>] [--fixed-value] --replace-all name value [value-pattern]
15'git config' [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] --get name [value-pattern]
16'git config' [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] --get-all name [value-pattern]
17'git config' [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] [--fixed-value] [--name-only] --get-regexp name_regex [value-pattern]
fb0dc3ba 18'git config' [<file-option>] [--type=<type>] [-z|--null] --get-urlmatch name URL
fda43942
DS
19'git config' [<file-option>] [--fixed-value] --unset name [value-pattern]
20'git config' [<file-option>] [--fixed-value] --unset-all name [value-pattern]
b1889c36
JN
21'git config' [<file-option>] --rename-section old_name new_name
22'git config' [<file-option>] --remove-section name
145d59f4 23'git config' [<file-option>] [--show-origin] [--show-scope] [-z|--null] [--name-only] -l | --list
b1889c36
JN
24'git config' [<file-option>] --get-color name [default]
25'git config' [<file-option>] --get-colorbool name [stdout-is-tty]
3bec8ff9 26'git config' [<file-option>] -e | --edit
e0d10e1c
TP
27
28DESCRIPTION
29-----------
30You can query/set/replace/unset options with this command. The name is
31actually the section and the key separated by a dot, and the value will be
32escaped.
33
bcf9626a 34Multiple lines can be added to an option by using the `--add` option.
e0d10e1c 35If you want to update or unset an option which can occur on multiple
c9026187
JH
36lines, a `value-pattern` (which is an extended regular expression,
37unless the `--fixed-value` option is given) needs to be given. Only the
38existing values that match the pattern are updated or unset. If
39you want to handle the lines that do *not* match the pattern, just
40prepend a single exclamation mark in front (see also <<EXAMPLES>>),
41but note that this only works when the `--fixed-value` option is not
42in use.
e0d10e1c 43
fb0dc3ba
TB
44The `--type=<type>` option instructs 'git config' to ensure that incoming and
45outgoing values are canonicalize-able under the given <type>. If no
46`--type=<type>` is given, no canonicalization will be performed. Callers may
47unset an existing `--type` specifier with `--no-type`.
e0d10e1c 48
c598c5aa
FA
49When reading, the values are read from the system, global and
50repository local configuration files by default, and options
58b284a2
NTND
51`--system`, `--global`, `--local`, `--worktree` and
52`--file <filename>` can be used to tell the command to read from only
53that location (see <<FILES>>).
c598c5aa
FA
54
55When writing, the new value is written to the repository local
bcf9626a 56configuration file by default, and options `--system`, `--global`,
58b284a2
NTND
57`--worktree`, `--file <filename>` can be used to tell the command to
58write to that location (you can say `--local` but that is the
59default).
be52a41c 60
9409c7a5
JH
61This command will fail with non-zero status upon error. Some exit
62codes are:
e0d10e1c 63
376eb604 64- The section or key is invalid (ret=1),
94c5b0e8 65- no section or name was provided (ret=2),
376eb604
SB
66- the config file is invalid (ret=3),
67- the config file cannot be written (ret=4),
94c5b0e8
JK
68- you try to unset an option which does not exist (ret=5),
69- you try to unset/set an option for which multiple lines match (ret=5), or
70- you try to use an invalid regexp (ret=6).
e0d10e1c 71
7a397419 72On success, the command returns the exit code 0.
e0d10e1c
TP
73
74OPTIONS
75-------
76
77--replace-all::
78 Default behavior is to replace at most one line. This replaces
247e2f82 79 all lines matching the key (and optionally the `value-pattern`).
e0d10e1c
TP
80
81--add::
82 Adds a new line to the option without altering any existing
247e2f82 83 values. This is the same as providing '^$' as the `value-pattern`
ac9f71cf 84 in `--replace-all`.
e0d10e1c
TP
85
86--get::
87 Get the value for a given key (optionally filtered by a regex
88 matching the value). Returns error code 1 if the key was not
62e91efa 89 found and the last value if multiple key values were found.
e0d10e1c
TP
90
91--get-all::
24990b2f 92 Like get, but returns all values for a multi-valued key.
e0d10e1c
TP
93
94--get-regexp::
e0a4aae8
LP
95 Like --get-all, but interprets the name as a regular expression and
96 writes out the key names. Regular expression matching is currently
97 case-sensitive and done against a canonicalized version of the key
98 in which section and variable names are lowercased, but subsection
99 names are not.
e0d10e1c 100
d4770964
JH
101--get-urlmatch name URL::
102 When given a two-part name section.key, the value for
103 section.<url>.key whose <url> part matches the best to the
104 given URL is returned (if no such key exists, the value for
105 section.key is used as a fallback). When given just the
106 section as name, do so for all the keys in the section and
27b30be6 107 list them. Returns error code 1 if no value is found.
d4770964 108
e0d10e1c 109--global::
5ff0c0e8
RR
110 For writing options: write to global `~/.gitconfig` file
111 rather than the repository `.git/config`, write to
112 `$XDG_CONFIG_HOME/git/config` file if this file exists and the
113 `~/.gitconfig` file doesn't.
17014090 114+
5ff0c0e8
RR
115For reading options: read only from global `~/.gitconfig` and from
116`$XDG_CONFIG_HOME/git/config` rather than from all available files.
17014090
FL
117+
118See also <<FILES>>.
e0d10e1c 119
9bc20aa7 120--system::
5ff0c0e8
RR
121 For writing options: write to system-wide
122 `$(prefix)/etc/gitconfig` rather than the repository
123 `.git/config`.
17014090 124+
5ff0c0e8 125For reading options: read only from system-wide `$(prefix)/etc/gitconfig`
17014090
FL
126rather than from all available files.
127+
128See also <<FILES>>.
9bc20aa7 129
560d4b86 130--local::
5ff0c0e8 131 For writing options: write to the repository `.git/config` file.
8d75a1d1 132 This is the default behavior.
560d4b86 133+
5ff0c0e8 134For reading options: read only from the repository `.git/config` rather than
560d4b86
NK
135from all available files.
136+
137See also <<FILES>>.
138
58b284a2
NTND
139--worktree::
140 Similar to `--local` except that `.git/config.worktree` is
141 read from or written to if `extensions.worktreeConfig` is
142 present. If not it's the same as `--local`.
143
3240240f
SB
144-f config-file::
145--file config-file::
67d454fe
AR
146 Use the given config file instead of the one specified by GIT_CONFIG.
147
1bc88819 148--blob blob::
bcf9626a 149 Similar to `--file` but use the given blob instead of a file. E.g.
1bc88819
HV
150 you can use 'master:.gitmodules' to read values from the file
151 '.gitmodules' in the master branch. See "SPECIFYING REVISIONS"
152 section in linkgit:gitrevisions[7] for a more complete list of
153 ways to spell blob names.
154
118f8b24
PB
155--remove-section::
156 Remove the given section from the configuration file.
157
158--rename-section::
159 Rename the given section to a new name.
160
e0d10e1c
TP
161--unset::
162 Remove the line matching the key from config file.
163
164--unset-all::
9debca9a 165 Remove all lines matching the key from config file.
e0d10e1c 166
3240240f
SB
167-l::
168--list::
578625fa 169 List all variables set in config file, along with their values.
e0d10e1c 170
fda43942
DS
171--fixed-value::
172 When used with the `value-pattern` argument, treat `value-pattern` as
173 an exact string instead of a regular expression. This will restrict
174 the name/value pairs that are matched to only those where the value
175 is exactly equal to the `value-pattern`.
176
fb0dc3ba
TB
177--type <type>::
178 'git config' will ensure that any input or output is valid under the given
179 type constraint(s), and will canonicalize outgoing values in `<type>`'s
180 canonical form.
181+
182Valid `<type>`'s include:
183+
184- 'bool': canonicalize values as either "true" or "false".
185- 'int': canonicalize values as simple decimal numbers. An optional suffix of
186 'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or
187 1073741824 upon input.
188- 'bool-or-int': canonicalize according to either 'bool' or 'int', as described
189 above.
190- 'path': canonicalize by adding a leading `~` to the value of `$HOME` and
191 `~user` to the home directory for the specified user. This specifier has no
192 effect when setting the value (but you can use `git config section.variable
193 ~/` from the command line to let your shell do the expansion.)
194- 'expiry-date': canonicalize by converting from a fixed or relative date-string
195 to a timestamp. This specifier has no effect when setting the value.
63e2a0f8
TB
196- 'color': When getting a value, canonicalize by converting to an ANSI color
197 escape sequence. When setting a value, a sanity-check is performed to ensure
198 that the given value is canonicalize-able as an ANSI color, but it is written
199 as-is.
fb0dc3ba 200+
e0d10e1c 201
fb0dc3ba 202--bool::
e0d10e1c 203--int::
d57f07eb 204--bool-or-int::
1349484e 205--path::
5f967424 206--expiry-date::
08caa95a
207 Historical options for selecting a type specifier. Prefer instead `--type`
208 (see above).
fb0dc3ba
TB
209
210--no-type::
211 Un-sets the previously set type specifier (if one was previously set). This
212 option requests that 'git config' not canonicalize the retrieved variable.
213 `--no-type` has no effect without `--type=<type>` or `--<type>`.
5f967424 214
3240240f
SB
215-z::
216--null::
2275d502 217 For all options that output values and/or keys, always
a5d86f74 218 end values with the null character (instead of a
2275d502
FL
219 newline). Use newline instead as a delimiter between
220 key and value. This allows for secure parsing of the
221 output without getting confused e.g. by values that
222 contain line breaks.
223
578625fa
SG
224--name-only::
225 Output only the names of config variables for `--list` or
226 `--get-regexp`.
227
70bd879a
LS
228--show-origin::
229 Augment the output of all queried config options with the
230 origin type (file, standard input, blob, command line) and
231 the actual origin (config file path, ref, or blob id if
232 applicable).
233
145d59f4
MR
234--show-scope::
235 Similar to `--show-origin` in that it augments the output of
236 all queried config options with the scope of that value
237 (local, global, system, command).
238
0f6f5a40
JH
239--get-colorbool name [stdout-is-tty]::
240
241 Find the color setting for `name` (e.g. `color.diff`) and output
242 "true" or "false". `stdout-is-tty` should be either "true" or
243 "false", and is taken into account when configuration says
244 "auto". If `stdout-is-tty` is missing, then checks the standard
245 output of the command itself, and exits with status 0 if color
246 is to be used, or exits with status 1 otherwise.
4d4f5ba3
MK
247 When the color setting for `name` is undefined, the command uses
248 `color.ui` as fallback.
0f6f5a40 249
ac9f71cf 250--get-color name [default]::
9ce03522
JH
251
252 Find the color configured for `name` (e.g. `color.diff.new`) and
253 output it as the ANSI color escape sequence to the standard
254 output. The optional `default` parameter is used instead, if
255 there is no color configured for `name`.
63e2a0f8 256+
cd8e7593
JK
257`--type=color [--default=<default>]` is preferred over `--get-color`
258(but note that `--get-color` will omit the trailing newline printed by
259`--type=color`).
e0d10e1c 260
3bec8ff9
FC
261-e::
262--edit::
263 Opens an editor to modify the specified config file; either
bcf9626a 264 `--system`, `--global`, or repository (default).
3bec8ff9 265
0460ed2c 266--[no-]includes::
9b25a0b5 267 Respect `include.*` directives in config files when looking up
753a2cda
JK
268 values. Defaults to `off` when a specific file is given (e.g.,
269 using `--file`, `--global`, etc) and `on` when searching all
270 config files.
9b25a0b5 271
eeaa24b9
TB
272--default <value>::
273 When using `--get`, and the requested variable is not found, behave as if
274 <value> were the value assigned to the that variable.
275
32888b8f
276CONFIGURATION
277-------------
278`pager.config` is only respected when listing configuration, i.e., when
279using `--list` or any of the `--get-*` which may return multiple results.
c0e9f5be 280The default is to use a pager.
32888b8f 281
17014090
FL
282[[FILES]]
283FILES
284-----
285
bcf9626a 286If not set explicitly with `--file`, there are four files where
0b444cdb 287'git config' will search for configuration options:
17014090 288
7da9800f
JK
289$(prefix)/etc/gitconfig::
290 System-wide configuration file.
17014090 291
21cf3227
HKNN
292$XDG_CONFIG_HOME/git/config::
293 Second user-specific configuration file. If $XDG_CONFIG_HOME is not set
5ff0c0e8 294 or empty, `$HOME/.config/git/config` will be used. Any single-valued
21cf3227 295 variable set in this file will be overwritten by whatever is in
5ff0c0e8 296 `~/.gitconfig`. It is a good idea not to create this file if
21cf3227
HKNN
297 you sometimes use older versions of Git, as support for this
298 file was added fairly recently.
299
7da9800f
JK
300~/.gitconfig::
301 User-specific configuration file. Also called "global"
302 configuration file.
303
304$GIT_DIR/config::
305 Repository specific configuration file.
17014090 306
58b284a2
NTND
307$GIT_DIR/config.worktree::
308 This is optional and is only searched when
309 `extensions.worktreeConfig` is present in $GIT_DIR/config.
310
17014090
FL
311If no further options are given, all reading options will read all of these
312files that are available. If the global or the system-wide configuration
313file are not available they will be ignored. If the repository configuration
0b444cdb 314file is not available or readable, 'git config' will exit with a non-zero
17014090
FL
315error code. However, in neither case will an error message be issued.
316
7da9800f
JK
317The files are read in the order given above, with last value found taking
318precedence over values read earlier. When multiple values are taken then all
319values of a key from all files will be used.
320
ae1f7094
DG
321You may override individual configuration parameters when running any git
322command by using the `-c` option. See linkgit:git[1] for details.
323
17014090 324All writing options will per default write to the repository specific
bcf9626a
MM
325configuration file. Note that this also affects options like `--replace-all`
326and `--unset`. *'git config' will only ever change one file at a time*.
17014090 327
06ab60c0 328You can override these rules either by command-line options or by environment
58b284a2
NTND
329variables. The `--global`, `--system` and `--worktree` options will limit
330the file used to the global, system-wide or per-worktree file respectively.
331The `GIT_CONFIG` environment variable has a similar effect, but you
332can specify any filename you want.
17014090 333
17014090 334
e0d10e1c
TP
335ENVIRONMENT
336-----------
337
338GIT_CONFIG::
339 Take the configuration from the given file instead of .git/config.
17014090
FL
340 Using the "--global" option forces this to ~/.gitconfig. Using the
341 "--system" option forces this to $(prefix)/etc/gitconfig.
e0d10e1c 342
e8ef401c
JN
343GIT_CONFIG_NOSYSTEM::
344 Whether to skip reading settings from the system-wide
345 $(prefix)/etc/gitconfig file. See linkgit:git[1] for details.
346
17014090 347See also <<FILES>>.
e0d10e1c 348
90a36e58
FL
349
350[[EXAMPLES]]
351EXAMPLES
352--------
e0d10e1c
TP
353
354Given a .git/config like this:
355
1925fe0c
356------------
357#
358# This is the config file, and
359# a '#' or ';' character indicates
360# a comment
361#
362
363; core variables
364[core]
365 ; Don't trust file modes
366 filemode = false
367
368; Our diff algorithm
369[diff]
370 external = /usr/local/bin/diff-wrapper
371 renames = true
372
373; Proxy settings
374[core]
375 gitproxy=proxy-command for kernel.org
376 gitproxy=default-proxy ; for all the rest
377
378; HTTP
379[http]
380 sslVerify
381[http "https://weak.example.com"]
382 sslVerify = false
383 cookieFile = /tmp/cookie.txt
384------------
d4770964 385
e0d10e1c
TP
386you can set the filemode to true with
387
388------------
389% git config core.filemode true
390------------
391
392The hypothetical proxy command entries actually have a postfix to discern
393what URL they apply to. Here is how to change the entry for kernel.org
394to "ssh".
395
396------------
397% git config core.gitproxy '"ssh" for kernel.org' 'for kernel.org$'
398------------
399
400This makes sure that only the key/value pair for kernel.org is replaced.
401
402To delete the entry for renames, do
403
404------------
405% git config --unset diff.renames
406------------
407
408If you want to delete an entry for a multivar (like core.gitproxy above),
409you have to provide a regex matching the value of exactly one line.
410
411To query the value for a given key, do
412
413------------
414% git config --get core.filemode
415------------
416
417or
418
419------------
420% git config core.filemode
421------------
422
423or, to query a multivar:
424
425------------
426% git config --get core.gitproxy "for kernel.org$"
427------------
428
429If you want to know all the values for a multivar, do:
430
431------------
432% git config --get-all core.gitproxy
433------------
434
544ddb04 435If you like to live dangerously, you can replace *all* core.gitproxy by a
e0d10e1c
TP
436new one with
437
438------------
439% git config --replace-all core.gitproxy ssh
440------------
441
442However, if you really only want to replace the line for the default proxy,
443i.e. the one without a "for ..." postfix, do something like this:
444
445------------
446% git config core.gitproxy ssh '! for '
447------------
448
449To actually match only values with an exclamation mark, you have to
450
451------------
452% git config section.key value '[!]'
453------------
454
455To add a new proxy, without altering any of the existing ones, use
456
457------------
d0714cc8 458% git config --add core.gitproxy '"proxy-command" for example.com'
e0d10e1c
TP
459------------
460
9ce03522
JH
461An example to use customized color from the configuration in your
462script:
463
464------------
465#!/bin/sh
466WS=$(git config --get-color color.diff.whitespace "blue reverse")
467RESET=$(git config --get-color "" "reset")
468echo "${WS}your whitespace color or blue reverse${RESET}"
469------------
e0d10e1c 470
d4770964
JH
471For URLs in `https://weak.example.com`, `http.sslVerify` is set to
472false, while it is set to `true` for all others:
473
474------------
ed3bb3df 475% git config --type=bool --get-urlmatch http.sslverify https://good.example.com
d4770964 476true
ed3bb3df 477% git config --type=bool --get-urlmatch http.sslverify https://weak.example.com
d4770964
JH
478false
479% git config --get-urlmatch http https://weak.example.com
da0005b8 480http.cookieFile /tmp/cookie.txt
d4770964
JH
481http.sslverify false
482------------
483
e0d10e1c
TP
484include::config.txt[]
485
bff7df7a
SB
486BUGS
487----
488When using the deprecated `[section.subsection]` syntax, changing a value
489will result in adding a multi-line key instead of a change, if the subsection
490is given with at least one uppercase character. For example when the config
491looks like
492
493--------
494 [section.subsection]
495 key = value1
496--------
497
498and running `git config section.Subsection.key value2` will result in
499
500--------
501 [section.subsection]
502 key = value1
503 key = value2
504--------
505
506
e0d10e1c
TP
507GIT
508---
9e1f0a85 509Part of the linkgit:git[1] suite