]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-config.txt
Sync with 2.31.4
[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
4179b489
PS
343GIT_CONFIG_GLOBAL::
344GIT_CONFIG_SYSTEM::
345 Take the configuration from the given files instead from global or
346 system-level configuration. See linkgit:git[1] for details.
347
e8ef401c
JN
348GIT_CONFIG_NOSYSTEM::
349 Whether to skip reading settings from the system-wide
350 $(prefix)/etc/gitconfig file. See linkgit:git[1] for details.
351
17014090 352See also <<FILES>>.
e0d10e1c 353
d8d77153
PS
354GIT_CONFIG_COUNT::
355GIT_CONFIG_KEY_<n>::
356GIT_CONFIG_VALUE_<n>::
357 If GIT_CONFIG_COUNT is set to a positive number, all environment pairs
358 GIT_CONFIG_KEY_<n> and GIT_CONFIG_VALUE_<n> up to that number will be
359 added to the process's runtime configuration. The config pairs are
360 zero-indexed. Any missing key or value is treated as an error. An empty
361 GIT_CONFIG_COUNT is treated the same as GIT_CONFIG_COUNT=0, namely no
362 pairs are processed. These environment variables will override values
363 in configuration files, but will be overridden by any explicit options
364 passed via `git -c`.
365+
366This is useful for cases where you want to spawn multiple git commands
367with a common configuration but cannot depend on a configuration file,
368for example when writing scripts.
369
90a36e58
FL
370
371[[EXAMPLES]]
372EXAMPLES
373--------
e0d10e1c
TP
374
375Given a .git/config like this:
376
1925fe0c
377------------
378#
379# This is the config file, and
380# a '#' or ';' character indicates
381# a comment
382#
383
384; core variables
385[core]
386 ; Don't trust file modes
387 filemode = false
388
389; Our diff algorithm
390[diff]
391 external = /usr/local/bin/diff-wrapper
392 renames = true
393
394; Proxy settings
395[core]
396 gitproxy=proxy-command for kernel.org
397 gitproxy=default-proxy ; for all the rest
398
399; HTTP
400[http]
401 sslVerify
402[http "https://weak.example.com"]
403 sslVerify = false
404 cookieFile = /tmp/cookie.txt
405------------
d4770964 406
e0d10e1c
TP
407you can set the filemode to true with
408
409------------
410% git config core.filemode true
411------------
412
413The hypothetical proxy command entries actually have a postfix to discern
414what URL they apply to. Here is how to change the entry for kernel.org
415to "ssh".
416
417------------
418% git config core.gitproxy '"ssh" for kernel.org' 'for kernel.org$'
419------------
420
421This makes sure that only the key/value pair for kernel.org is replaced.
422
423To delete the entry for renames, do
424
425------------
426% git config --unset diff.renames
427------------
428
429If you want to delete an entry for a multivar (like core.gitproxy above),
430you have to provide a regex matching the value of exactly one line.
431
432To query the value for a given key, do
433
434------------
435% git config --get core.filemode
436------------
437
438or
439
440------------
441% git config core.filemode
442------------
443
444or, to query a multivar:
445
446------------
447% git config --get core.gitproxy "for kernel.org$"
448------------
449
450If you want to know all the values for a multivar, do:
451
452------------
453% git config --get-all core.gitproxy
454------------
455
544ddb04 456If you like to live dangerously, you can replace *all* core.gitproxy by a
e0d10e1c
TP
457new one with
458
459------------
460% git config --replace-all core.gitproxy ssh
461------------
462
463However, if you really only want to replace the line for the default proxy,
464i.e. the one without a "for ..." postfix, do something like this:
465
466------------
467% git config core.gitproxy ssh '! for '
468------------
469
470To actually match only values with an exclamation mark, you have to
471
472------------
473% git config section.key value '[!]'
474------------
475
476To add a new proxy, without altering any of the existing ones, use
477
478------------
d0714cc8 479% git config --add core.gitproxy '"proxy-command" for example.com'
e0d10e1c
TP
480------------
481
9ce03522
JH
482An example to use customized color from the configuration in your
483script:
484
485------------
486#!/bin/sh
487WS=$(git config --get-color color.diff.whitespace "blue reverse")
488RESET=$(git config --get-color "" "reset")
489echo "${WS}your whitespace color or blue reverse${RESET}"
490------------
e0d10e1c 491
d4770964
JH
492For URLs in `https://weak.example.com`, `http.sslVerify` is set to
493false, while it is set to `true` for all others:
494
495------------
ed3bb3df 496% git config --type=bool --get-urlmatch http.sslverify https://good.example.com
d4770964 497true
ed3bb3df 498% git config --type=bool --get-urlmatch http.sslverify https://weak.example.com
d4770964
JH
499false
500% git config --get-urlmatch http https://weak.example.com
da0005b8 501http.cookieFile /tmp/cookie.txt
d4770964
JH
502http.sslverify false
503------------
504
e0d10e1c
TP
505include::config.txt[]
506
bff7df7a
SB
507BUGS
508----
509When using the deprecated `[section.subsection]` syntax, changing a value
510will result in adding a multi-line key instead of a change, if the subsection
511is given with at least one uppercase character. For example when the config
512looks like
513
514--------
515 [section.subsection]
516 key = value1
517--------
518
519and running `git config section.Subsection.key value2` will result in
520
521--------
522 [section.subsection]
523 key = value1
524 key = value2
525--------
526
527
e0d10e1c
TP
528GIT
529---
9e1f0a85 530Part of the linkgit:git[1] suite