blob: dff39093b5ef322ce115afc8f4bee0c728b6173a [file] [log] [blame]
Tom Princee0d10e12007-01-28 16:16:53 -08001git-config(1)
2=============
3
4NAME
5----
6git-config - Get and set repository or global options
7
8
9SYNOPSIS
10--------
11[verse]
Jean-Noël Avila49cbad02021-11-06 19:48:51 +010012'git config' [<file-option>] [--type=<type>] [--fixed-value] [--show-origin] [--show-scope] [-z|--null] <name> [<value> [<value-pattern>]]
13'git config' [<file-option>] [--type=<type>] --add <name> <value>
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>]
18'git config' [<file-option>] [--type=<type>] [-z|--null] --get-urlmatch <name> <URL>
19'git config' [<file-option>] [--fixed-value] --unset <name> [<value-pattern>]
20'git config' [<file-option>] [--fixed-value] --unset-all <name> [<value-pattern>]
21'git config' [<file-option>] --rename-section <old-name> <new-name>
22'git config' [<file-option>] --remove-section <name>
Matthew Rogers145d59f2020-02-10 00:30:59 +000023'git config' [<file-option>] [--show-origin] [--show-scope] [-z|--null] [--name-only] -l | --list
Jean-Noël Avila49cbad02021-11-06 19:48:51 +010024'git config' [<file-option>] --get-color <name> [<default>]
25'git config' [<file-option>] --get-colorbool <name> [<stdout-is-tty>]
Felipe Contreras3bec8ff2009-02-07 23:53:00 +020026'git config' [<file-option>] -e | --edit
Tom Princee0d10e12007-01-28 16:16:53 -080027
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
Matthieu Moybcf96262016-06-28 13:40:11 +020034Multiple lines can be added to an option by using the `--add` option.
Tom Princee0d10e12007-01-28 16:16:53 -080035If you want to update or unset an option which can occur on multiple
Junio C Hamanoc9026182020-11-25 15:01:31 -080036lines, 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.
Tom Princee0d10e12007-01-28 16:16:53 -080043
Taylor Blaufb0dc3b2018-04-18 14:43:35 -070044The `--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`.
Tom Princee0d10e12007-01-28 16:16:53 -080048
Florian Achleitnerc598c5a2012-05-05 12:03:52 +020049When reading, the values are read from the system, global and
50repository local configuration files by default, and options
Nguyễn Thái Ngọc Duy58b284a2018-10-21 16:02:28 +020051`--system`, `--global`, `--local`, `--worktree` and
52`--file <filename>` can be used to tell the command to read from only
53that location (see <<FILES>>).
Florian Achleitnerc598c5a2012-05-05 12:03:52 +020054
55When writing, the new value is written to the repository local
Matthieu Moybcf96262016-06-28 13:40:11 +020056configuration file by default, and options `--system`, `--global`,
Nguyễn Thái Ngọc Duy58b284a2018-10-21 16:02:28 +020057`--worktree`, `--file <filename>` can be used to tell the command to
58write to that location (you can say `--local` but that is the
59default).
Alex Riesenbe52a412007-08-01 00:01:17 +020060
Junio C Hamano9409c7a2012-07-29 13:43:21 -070061This command will fail with non-zero status upon error. Some exit
62codes are:
Tom Princee0d10e12007-01-28 16:16:53 -080063
Stefan Beller376eb602016-04-26 11:10:58 -070064- The section or key is invalid (ret=1),
John Keeping94c5b0e2016-02-28 11:54:36 +000065- no section or name was provided (ret=2),
Stefan Beller376eb602016-04-26 11:10:58 -070066- the config file is invalid (ret=3),
67- the config file cannot be written (ret=4),
John Keeping94c5b0e2016-02-28 11:54:36 +000068- 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).
Tom Princee0d10e12007-01-28 16:16:53 -080071
Michael J Gruber7a397412011-05-17 17:38:52 +020072On success, the command returns the exit code 0.
Tom Princee0d10e12007-01-28 16:16:53 -080073
Philip Oakleyae578de2021-09-13 22:23:05 +010074A list of all available configuration variables can be obtained using the
75`git help --config` command.
76
Jeff King73428382021-07-14 17:38:27 -040077[[OPTIONS]]
Tom Princee0d10e12007-01-28 16:16:53 -080078OPTIONS
79-------
80
81--replace-all::
82 Default behavior is to replace at most one line. This replaces
Derrick Stolee247e2f82020-11-25 22:12:50 +000083 all lines matching the key (and optionally the `value-pattern`).
Tom Princee0d10e12007-01-28 16:16:53 -080084
85--add::
86 Adds a new line to the option without altering any existing
Derrick Stolee247e2f82020-11-25 22:12:50 +000087 values. This is the same as providing '^$' as the `value-pattern`
Felipe Contrerasac9f71c2009-05-07 01:57:08 +030088 in `--replace-all`.
Tom Princee0d10e12007-01-28 16:16:53 -080089
90--get::
91 Get the value for a given key (optionally filtered by a regex
92 matching the value). Returns error code 1 if the key was not
John Keeping62e91ef2013-07-03 19:27:39 +010093 found and the last value if multiple key values were found.
Tom Princee0d10e12007-01-28 16:16:53 -080094
95--get-all::
John Keeping24990b22016-02-28 11:54:37 +000096 Like get, but returns all values for a multi-valued key.
Tom Princee0d10e12007-01-28 16:16:53 -080097
98--get-regexp::
Libor Pechaceke0a4aae2012-03-01 11:59:45 +010099 Like --get-all, but interprets the name as a regular expression and
100 writes out the key names. Regular expression matching is currently
101 case-sensitive and done against a canonicalized version of the key
102 in which section and variable names are lowercased, but subsection
103 names are not.
Tom Princee0d10e12007-01-28 16:16:53 -0800104
Jean-Noël Avila49cbad02021-11-06 19:48:51 +0100105--get-urlmatch <name> <URL>::
Jean-Noël Avila51e846e2023-12-25 21:21:27 +0000106 When given a two-part <name> as <section>.<key>, the value for
107 <section>.<URL>.<key> whose <URL> part matches the best to the
Junio C Hamanod4770962013-07-31 11:14:59 -0700108 given URL is returned (if no such key exists, the value for
Jean-Noël Avila51e846e2023-12-25 21:21:27 +0000109 <section>.<key> is used as a fallback). When given just the
110 <section> as name, do so for all the keys in the section and
John Keeping27b30be2016-02-28 11:54:35 +0000111 list them. Returns error code 1 if no value is found.
Junio C Hamanod4770962013-07-31 11:14:59 -0700112
Tom Princee0d10e12007-01-28 16:16:53 -0800113--global::
Ramkumar Ramachandra5ff0c0e2013-07-26 16:12:02 +0530114 For writing options: write to global `~/.gitconfig` file
115 rather than the repository `.git/config`, write to
116 `$XDG_CONFIG_HOME/git/config` file if this file exists and the
117 `~/.gitconfig` file doesn't.
Frank Lichtenheld17014092007-05-31 02:35:37 +0200118+
Ramkumar Ramachandra5ff0c0e2013-07-26 16:12:02 +0530119For reading options: read only from global `~/.gitconfig` and from
120`$XDG_CONFIG_HOME/git/config` rather than from all available files.
Frank Lichtenheld17014092007-05-31 02:35:37 +0200121+
122See also <<FILES>>.
Tom Princee0d10e12007-01-28 16:16:53 -0800123
Andrew Ruder9bc20aa2007-04-18 22:03:37 -0500124--system::
Ramkumar Ramachandra5ff0c0e2013-07-26 16:12:02 +0530125 For writing options: write to system-wide
126 `$(prefix)/etc/gitconfig` rather than the repository
127 `.git/config`.
Frank Lichtenheld17014092007-05-31 02:35:37 +0200128+
Ramkumar Ramachandra5ff0c0e2013-07-26 16:12:02 +0530129For reading options: read only from system-wide `$(prefix)/etc/gitconfig`
Frank Lichtenheld17014092007-05-31 02:35:37 +0200130rather than from all available files.
131+
132See also <<FILES>>.
Andrew Ruder9bc20aa2007-04-18 22:03:37 -0500133
Namhyung Kim560d4b82013-06-17 22:31:31 +0900134--local::
Ramkumar Ramachandra5ff0c0e2013-07-26 16:12:02 +0530135 For writing options: write to the repository `.git/config` file.
Martin Ågren8d75a1d2019-03-06 07:30:18 +0100136 This is the default behavior.
Namhyung Kim560d4b82013-06-17 22:31:31 +0900137+
Ramkumar Ramachandra5ff0c0e2013-07-26 16:12:02 +0530138For reading options: read only from the repository `.git/config` rather than
Namhyung Kim560d4b82013-06-17 22:31:31 +0900139from all available files.
140+
141See also <<FILES>>.
142
Nguyễn Thái Ngọc Duy58b284a2018-10-21 16:02:28 +0200143--worktree::
Derrick Stolee5c11c0d2022-02-07 21:32:58 +0000144 Similar to `--local` except that `$GIT_DIR/config.worktree` is
Nguyễn Thái Ngọc Duy58b284a2018-10-21 16:02:28 +0200145 read from or written to if `extensions.worktreeConfig` is
Derrick Stolee5c11c0d2022-02-07 21:32:58 +0000146 enabled. If not it's the same as `--local`. Note that `$GIT_DIR`
147 is equal to `$GIT_COMMON_DIR` for the main working tree, but is of
148 the form `$GIT_DIR/worktrees/<id>/` for other working trees. See
149 linkgit:git-worktree[1] to learn how to enable
150 `extensions.worktreeConfig`.
Nguyễn Thái Ngọc Duy58b284a2018-10-21 16:02:28 +0200151
Jean-Noël Avila49cbad02021-11-06 19:48:51 +0100152-f <config-file>::
153--file <config-file>::
Jeff King4bb9eb52021-07-14 17:37:29 -0400154 For writing options: write to the specified file rather than the
155 repository `.git/config`.
156+
157For reading options: read only from the specified file rather than from all
158available files.
159+
160See also <<FILES>>.
Alex Riesen67d454f2007-07-31 11:58:43 +0200161
Jean-Noël Avila49cbad02021-11-06 19:48:51 +0100162--blob <blob>::
Matthieu Moybcf96262016-06-28 13:40:11 +0200163 Similar to `--file` but use the given blob instead of a file. E.g.
Heiko Voigt1bc88812013-07-12 00:46:47 +0200164 you can use 'master:.gitmodules' to read values from the file
165 '.gitmodules' in the master branch. See "SPECIFYING REVISIONS"
166 section in linkgit:gitrevisions[7] for a more complete list of
167 ways to spell blob names.
168
Paolo Bonzini118f8b22007-03-02 21:53:33 +0100169--remove-section::
170 Remove the given section from the configuration file.
171
172--rename-section::
173 Rename the given section to a new name.
174
Tom Princee0d10e12007-01-28 16:16:53 -0800175--unset::
176 Remove the line matching the key from config file.
177
178--unset-all::
Yann Dirson9debca92007-03-14 22:08:41 +0100179 Remove all lines matching the key from config file.
Tom Princee0d10e12007-01-28 16:16:53 -0800180
Stephan Beyer32402402008-06-08 03:36:09 +0200181-l::
182--list::
SZEDER Gábor578625f2015-08-10 11:46:06 +0200183 List all variables set in config file, along with their values.
Tom Princee0d10e12007-01-28 16:16:53 -0800184
Derrick Stoleefda43942020-11-25 22:12:53 +0000185--fixed-value::
186 When used with the `value-pattern` argument, treat `value-pattern` as
187 an exact string instead of a regular expression. This will restrict
188 the name/value pairs that are matched to only those where the value
189 is exactly equal to the `value-pattern`.
190
Taylor Blaufb0dc3b2018-04-18 14:43:35 -0700191--type <type>::
192 'git config' will ensure that any input or output is valid under the given
193 type constraint(s), and will canonicalize outgoing values in `<type>`'s
194 canonical form.
195+
196Valid `<type>`'s include:
197+
198- 'bool': canonicalize values as either "true" or "false".
199- 'int': canonicalize values as simple decimal numbers. An optional suffix of
200 'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or
201 1073741824 upon input.
202- 'bool-or-int': canonicalize according to either 'bool' or 'int', as described
203 above.
Evan Gates58be1142023-09-15 14:24:59 -0600204- 'path': canonicalize by expanding a leading `~` to the value of `$HOME` and
Taylor Blaufb0dc3b2018-04-18 14:43:35 -0700205 `~user` to the home directory for the specified user. This specifier has no
206 effect when setting the value (but you can use `git config section.variable
207 ~/` from the command line to let your shell do the expansion.)
208- 'expiry-date': canonicalize by converting from a fixed or relative date-string
209 to a timestamp. This specifier has no effect when setting the value.
Taylor Blau63e2a0f2018-04-09 17:18:31 -0700210- 'color': When getting a value, canonicalize by converting to an ANSI color
211 escape sequence. When setting a value, a sanity-check is performed to ensure
212 that the given value is canonicalize-able as an ANSI color, but it is written
213 as-is.
Taylor Blaufb0dc3b2018-04-18 14:43:35 -0700214+
215
Tom Princee0d10e12007-01-28 16:16:53 -0800216--bool::
Tom Princee0d10e12007-01-28 16:16:53 -0800217--int::
Jeff Kingd57f07e2009-03-07 12:14:06 -0500218--bool-or-int::
Matthieu Moy13494842009-12-30 17:51:53 +0100219--path::
Haaris Mehmood5f967422017-11-18 02:27:27 +0000220--expiry-date::
Martin Ågren08caa952018-09-19 18:38:19 +0200221 Historical options for selecting a type specifier. Prefer instead `--type`
222 (see above).
Taylor Blaufb0dc3b2018-04-18 14:43:35 -0700223
224--no-type::
225 Un-sets the previously set type specifier (if one was previously set). This
226 option requests that 'git config' not canonicalize the retrieved variable.
227 `--no-type` has no effect without `--type=<type>` or `--<type>`.
Haaris Mehmood5f967422017-11-18 02:27:27 +0000228
Stephan Beyer32402402008-06-08 03:36:09 +0200229-z::
230--null::
Frank Lichtenheld2275d502007-06-25 16:03:55 +0200231 For all options that output values and/or keys, always
Jim Meyeringa5d86f72008-01-29 20:38:55 +0100232 end values with the null character (instead of a
Frank Lichtenheld2275d502007-06-25 16:03:55 +0200233 newline). Use newline instead as a delimiter between
234 key and value. This allows for secure parsing of the
235 output without getting confused e.g. by values that
236 contain line breaks.
237
SZEDER Gábor578625f2015-08-10 11:46:06 +0200238--name-only::
239 Output only the names of config variables for `--list` or
240 `--get-regexp`.
241
Lars Schneider70bd8792016-02-19 10:16:02 +0100242--show-origin::
243 Augment the output of all queried config options with the
244 origin type (file, standard input, blob, command line) and
245 the actual origin (config file path, ref, or blob id if
246 applicable).
247
Matthew Rogers145d59f2020-02-10 00:30:59 +0000248--show-scope::
249 Similar to `--show-origin` in that it augments the output of
250 all queried config options with the scope of that value
Glen Choodb7961e2022-06-07 21:24:04 +0000251 (worktree, local, global, system, command).
Matthew Rogers145d59f2020-02-10 00:30:59 +0000252
Jean-Noël Avila49cbad02021-11-06 19:48:51 +0100253--get-colorbool <name> [<stdout-is-tty>]::
Junio C Hamano0f6f5a42007-12-05 17:26:11 -0800254
Jean-Noël Avila49cbad02021-11-06 19:48:51 +0100255 Find the color setting for `<name>` (e.g. `color.diff`) and output
256 "true" or "false". `<stdout-is-tty>` should be either "true" or
Junio C Hamano0f6f5a42007-12-05 17:26:11 -0800257 "false", and is taken into account when configuration says
Jean-Noël Avila49cbad02021-11-06 19:48:51 +0100258 "auto". If `<stdout-is-tty>` is missing, then checks the standard
Junio C Hamano0f6f5a42007-12-05 17:26:11 -0800259 output of the command itself, and exits with status 0 if color
260 is to be used, or exits with status 1 otherwise.
Matthias Kestenholz4d4f5ba2008-04-09 21:32:06 +0200261 When the color setting for `name` is undefined, the command uses
262 `color.ui` as fallback.
Junio C Hamano0f6f5a42007-12-05 17:26:11 -0800263
Jean-Noël Avila49cbad02021-11-06 19:48:51 +0100264--get-color <name> [<default>]::
Junio C Hamano9ce03522007-11-27 22:41:05 -0800265
266 Find the color configured for `name` (e.g. `color.diff.new`) and
267 output it as the ANSI color escape sequence to the standard
268 output. The optional `default` parameter is used instead, if
269 there is no color configured for `name`.
Taylor Blau63e2a0f2018-04-09 17:18:31 -0700270+
Jeff Kingcd8e7592019-03-04 23:20:51 -0500271`--type=color [--default=<default>]` is preferred over `--get-color`
272(but note that `--get-color` will omit the trailing newline printed by
273`--type=color`).
Tom Princee0d10e12007-01-28 16:16:53 -0800274
Felipe Contreras3bec8ff2009-02-07 23:53:00 +0200275-e::
276--edit::
277 Opens an editor to modify the specified config file; either
Matthieu Moybcf96262016-06-28 13:40:11 +0200278 `--system`, `--global`, or repository (default).
Felipe Contreras3bec8ff2009-02-07 23:53:00 +0200279
Felipe Contreras0460ed22013-05-08 20:16:55 -0500280--[no-]includes::
Jeff King9b25a0b2012-02-06 04:54:04 -0500281 Respect `include.*` directives in config files when looking up
Jeff King753a2cd2015-01-19 14:58:47 -0500282 values. Defaults to `off` when a specific file is given (e.g.,
283 using `--file`, `--global`, etc) and `on` when searching all
284 config files.
Jeff King9b25a0b2012-02-06 04:54:04 -0500285
Taylor Blaueeaa24b2018-04-09 17:18:26 -0700286--default <value>::
287 When using `--get`, and the requested variable is not found, behave as if
288 <value> were the value assigned to the that variable.
289
Martin Ågren32888b82018-02-21 19:51:43 +0100290CONFIGURATION
291-------------
292`pager.config` is only respected when listing configuration, i.e., when
293using `--list` or any of the `--get-*` which may return multiple results.
Martin Ågrenc0e9f5b2018-02-21 19:51:44 +0100294The default is to use a pager.
Martin Ågren32888b82018-02-21 19:51:43 +0100295
Frank Lichtenheld17014092007-05-31 02:35:37 +0200296[[FILES]]
297FILES
298-----
299
Glen Choo5f5af372022-07-14 21:27:57 +0000300By default, 'git config' will read configuration options from multiple
301files:
Frank Lichtenheld17014092007-05-31 02:35:37 +0200302
John Keeping7da98002013-07-07 20:49:56 +0100303$(prefix)/etc/gitconfig::
304 System-wide configuration file.
Frank Lichtenheld17014092007-05-31 02:35:37 +0200305
Huynh Khoi Nguyen Nguyen21cf3222012-06-22 11:03:23 +0200306$XDG_CONFIG_HOME/git/config::
John Keeping7da98002013-07-07 20:49:56 +0100307~/.gitconfig::
Glen Choo5f5af372022-07-14 21:27:57 +0000308 User-specific configuration files. When the XDG_CONFIG_HOME environment
309 variable is not set or empty, $HOME/.config/ is used as
310 $XDG_CONFIG_HOME.
311+
312These are also called "global" configuration files. If both files exist, both
313files are read in the order given above.
John Keeping7da98002013-07-07 20:49:56 +0100314
315$GIT_DIR/config::
316 Repository specific configuration file.
Frank Lichtenheld17014092007-05-31 02:35:37 +0200317
Nguyễn Thái Ngọc Duy58b284a2018-10-21 16:02:28 +0200318$GIT_DIR/config.worktree::
319 This is optional and is only searched when
320 `extensions.worktreeConfig` is present in $GIT_DIR/config.
321
Glen Choo5f5af372022-07-14 21:27:57 +0000322You may also provide additional configuration parameters when running any
323git command by using the `-c` option. See linkgit:git[1] for details.
324
325Options will be read from all of these files that are available. If the
326global or the system-wide configuration files are missing or unreadable they
327will be ignored. If the repository configuration file is missing or unreadable,
328'git config' will exit with a non-zero error code. An error message is produced
329if the file is unreadable, but not if it is missing.
Frank Lichtenheld17014092007-05-31 02:35:37 +0200330
John Keeping7da98002013-07-07 20:49:56 +0100331The files are read in the order given above, with last value found taking
332precedence over values read earlier. When multiple values are taken then all
333values of a key from all files will be used.
334
Glen Choo5f5af372022-07-14 21:27:57 +0000335By default, options are only written to the repository specific
Matthieu Moybcf96262016-06-28 13:40:11 +0200336configuration file. Note that this also affects options like `--replace-all`
337and `--unset`. *'git config' will only ever change one file at a time*.
Frank Lichtenheld17014092007-05-31 02:35:37 +0200338
Glen Choo5f5af372022-07-14 21:27:57 +0000339You can limit which configuration sources are read from or written to by
340specifying the path of a file with the `--file` option, or by specifying a
341configuration scope with `--system`, `--global`, `--local`, or `--worktree`.
342For more, see <<OPTIONS>> above.
Frank Lichtenheld17014092007-05-31 02:35:37 +0200343
Glen Choo779ea932022-07-14 21:27:58 +0000344[[SCOPES]]
Glen Choo5f5af372022-07-14 21:27:57 +0000345SCOPES
346------
Frank Lichtenheld17014092007-05-31 02:35:37 +0200347
Glen Choo5f5af372022-07-14 21:27:57 +0000348Each configuration source falls within a configuration scope. The scopes
349are:
350
351system::
352 $(prefix)/etc/gitconfig
353
354global::
355 $XDG_CONFIG_HOME/git/config
356+
357~/.gitconfig
358
359local::
360 $GIT_DIR/config
361
362worktree::
363 $GIT_DIR/config.worktree
364
365command::
366 GIT_CONFIG_{COUNT,KEY,VALUE} environment variables (see <<ENVIRONMENT>>
367 below)
368+
369the `-c` option
370
371With the exception of 'command', each scope corresponds to a command line
372option: `--system`, `--global`, `--local`, `--worktree`.
373
374When reading options, specifying a scope will only read options from the
375files within that scope. When writing options, specifying a scope will write
376to the files within that scope (instead of the repository specific
377configuration file). See <<OPTIONS>> above for a complete description.
378
379Most configuration options are respected regardless of the scope it is
380defined in, but some options are only respected in certain scopes. See the
381respective option's documentation for the full details.
382
Glen Choo779ea932022-07-14 21:27:58 +0000383Protected configuration
384~~~~~~~~~~~~~~~~~~~~~~~
385
386Protected configuration refers to the 'system', 'global', and 'command' scopes.
387For security reasons, certain options are only respected when they are
388specified in protected configuration, and ignored otherwise.
389
390Git treats these scopes as if they are controlled by the user or a trusted
391administrator. This is because an attacker who controls these scopes can do
392substantial harm without using Git, so it is assumed that the user's environment
393protects these scopes against attackers.
394
Glen Choo5f5af372022-07-14 21:27:57 +0000395[[ENVIRONMENT]]
Tom Princee0d10e12007-01-28 16:16:53 -0800396ENVIRONMENT
397-----------
398
Patrick Steinhardt4179b482021-04-19 14:31:16 +0200399GIT_CONFIG_GLOBAL::
400GIT_CONFIG_SYSTEM::
401 Take the configuration from the given files instead from global or
402 system-level configuration. See linkgit:git[1] for details.
403
Jonathan Niedere8ef4012012-10-14 01:53:59 -0700404GIT_CONFIG_NOSYSTEM::
405 Whether to skip reading settings from the system-wide
406 $(prefix)/etc/gitconfig file. See linkgit:git[1] for details.
407
Frank Lichtenheld17014092007-05-31 02:35:37 +0200408See also <<FILES>>.
Tom Princee0d10e12007-01-28 16:16:53 -0800409
Patrick Steinhardtd8d77152021-01-12 13:27:14 +0100410GIT_CONFIG_COUNT::
411GIT_CONFIG_KEY_<n>::
412GIT_CONFIG_VALUE_<n>::
413 If GIT_CONFIG_COUNT is set to a positive number, all environment pairs
414 GIT_CONFIG_KEY_<n> and GIT_CONFIG_VALUE_<n> up to that number will be
415 added to the process's runtime configuration. The config pairs are
416 zero-indexed. Any missing key or value is treated as an error. An empty
417 GIT_CONFIG_COUNT is treated the same as GIT_CONFIG_COUNT=0, namely no
418 pairs are processed. These environment variables will override values
419 in configuration files, but will be overridden by any explicit options
420 passed via `git -c`.
421+
422This is useful for cases where you want to spawn multiple git commands
423with a common configuration but cannot depend on a configuration file,
424for example when writing scripts.
425
Jeff Kingb3b18622021-07-14 17:38:16 -0400426GIT_CONFIG::
427 If no `--file` option is provided to `git config`, use the file
428 given by `GIT_CONFIG` as if it were provided via `--file`. This
429 variable has no effect on other Git commands, and is mostly for
430 historical compatibility; there is generally no reason to use it
431 instead of the `--file` option.
Frank Lichtenheld90a36e52007-05-31 02:35:36 +0200432
433[[EXAMPLES]]
434EXAMPLES
435--------
Tom Princee0d10e12007-01-28 16:16:53 -0800436
437Given a .git/config like this:
438
Martin Ågren1925fe02019-09-07 16:12:49 +0200439------------
440#
441# This is the config file, and
442# a '#' or ';' character indicates
443# a comment
444#
Tom Princee0d10e12007-01-28 16:16:53 -0800445
Martin Ågren1925fe02019-09-07 16:12:49 +0200446; core variables
447[core]
448 ; Don't trust file modes
449 filemode = false
Tom Princee0d10e12007-01-28 16:16:53 -0800450
Martin Ågren1925fe02019-09-07 16:12:49 +0200451; Our diff algorithm
452[diff]
453 external = /usr/local/bin/diff-wrapper
454 renames = true
Tom Princee0d10e12007-01-28 16:16:53 -0800455
Martin Ågren1925fe02019-09-07 16:12:49 +0200456; Proxy settings
457[core]
458 gitproxy=proxy-command for kernel.org
459 gitproxy=default-proxy ; for all the rest
Tom Princee0d10e12007-01-28 16:16:53 -0800460
Martin Ågren1925fe02019-09-07 16:12:49 +0200461; HTTP
462[http]
463 sslVerify
464[http "https://weak.example.com"]
465 sslVerify = false
466 cookieFile = /tmp/cookie.txt
467------------
Junio C Hamanod4770962013-07-31 11:14:59 -0700468
Tom Princee0d10e12007-01-28 16:16:53 -0800469you can set the filemode to true with
470
471------------
472% git config core.filemode true
473------------
474
475The hypothetical proxy command entries actually have a postfix to discern
476what URL they apply to. Here is how to change the entry for kernel.org
477to "ssh".
478
479------------
480% git config core.gitproxy '"ssh" for kernel.org' 'for kernel.org$'
481------------
482
483This makes sure that only the key/value pair for kernel.org is replaced.
484
485To delete the entry for renames, do
486
487------------
488% git config --unset diff.renames
489------------
490
491If you want to delete an entry for a multivar (like core.gitproxy above),
492you have to provide a regex matching the value of exactly one line.
493
494To query the value for a given key, do
495
496------------
497% git config --get core.filemode
498------------
499
500or
501
502------------
503% git config core.filemode
504------------
505
506or, to query a multivar:
507
508------------
509% git config --get core.gitproxy "for kernel.org$"
510------------
511
512If you want to know all the values for a multivar, do:
513
514------------
515% git config --get-all core.gitproxy
516------------
517
Jim Meyering544ddb02008-12-12 10:00:41 +0100518If you like to live dangerously, you can replace *all* core.gitproxy by a
Tom Princee0d10e12007-01-28 16:16:53 -0800519new one with
520
521------------
522% git config --replace-all core.gitproxy ssh
523------------
524
525However, if you really only want to replace the line for the default proxy,
526i.e. the one without a "for ..." postfix, do something like this:
527
528------------
529% git config core.gitproxy ssh '! for '
530------------
531
532To actually match only values with an exclamation mark, you have to
533
534------------
535% git config section.key value '[!]'
536------------
537
538To add a new proxy, without altering any of the existing ones, use
539
540------------
Michael Haggertyd0714cc2012-08-18 19:32:10 +0200541% git config --add core.gitproxy '"proxy-command" for example.com'
Tom Princee0d10e12007-01-28 16:16:53 -0800542------------
543
Junio C Hamano9ce03522007-11-27 22:41:05 -0800544An example to use customized color from the configuration in your
545script:
546
547------------
548#!/bin/sh
549WS=$(git config --get-color color.diff.whitespace "blue reverse")
550RESET=$(git config --get-color "" "reset")
551echo "${WS}your whitespace color or blue reverse${RESET}"
552------------
Tom Princee0d10e12007-01-28 16:16:53 -0800553
Junio C Hamanod4770962013-07-31 11:14:59 -0700554For URLs in `https://weak.example.com`, `http.sslVerify` is set to
555false, while it is set to `true` for all others:
556
557------------
Martin Ågrened3bb3d2018-09-19 18:38:18 +0200558% git config --type=bool --get-urlmatch http.sslverify https://good.example.com
Junio C Hamanod4770962013-07-31 11:14:59 -0700559true
Martin Ågrened3bb3d2018-09-19 18:38:18 +0200560% git config --type=bool --get-urlmatch http.sslverify https://weak.example.com
Junio C Hamanod4770962013-07-31 11:14:59 -0700561false
562% git config --get-urlmatch http https://weak.example.com
Nguyễn Thái Ngọc Duyda0005b2015-03-11 16:32:45 -0400563http.cookieFile /tmp/cookie.txt
Junio C Hamanod4770962013-07-31 11:14:59 -0700564http.sslverify false
565------------
566
Tom Princee0d10e12007-01-28 16:16:53 -0800567include::config.txt[]
568
Stefan Bellerbff7df72018-08-08 12:50:20 -0700569BUGS
570----
571When using the deprecated `[section.subsection]` syntax, changing a value
572will result in adding a multi-line key instead of a change, if the subsection
573is given with at least one uppercase character. For example when the config
574looks like
575
576--------
577 [section.subsection]
578 key = value1
579--------
580
581and running `git config section.Subsection.key value2` will result in
582
583--------
584 [section.subsection]
585 key = value1
586 key = value2
587--------
588
589
Tom Princee0d10e12007-01-28 16:16:53 -0800590GIT
591---
Christian Couder9e1f0a82008-06-06 09:07:32 +0200592Part of the linkgit:git[1] suite