git-config(1)
=============

NAME
----
git-config - Get and set repository or global options


SYNOPSIS
--------
[verse]
'git config list' [<file-option>] [<display-option>] [--includes]
'git config get' [<file-option>] [<display-option>] [--includes] [--all] [--regexp] [--value=<value>] [--fixed-value] [--default=<default>] <name>
'git config set' [<file-option>] [--type=<type>] [--all] [--value=<value>] [--fixed-value] <name> <value>
'git config unset' [<file-option>] [--all] [--value=<value>] [--fixed-value] <name>
'git config rename-section' [<file-option>] <old-name> <new-name>
'git config remove-section' [<file-option>] <name>
'git config edit' [<file-option>]
'git config' [<file-option>] --get-colorbool <name> [<stdout-is-tty>]

DESCRIPTION
-----------
You can query/set/replace/unset options with this command. The name is
actually the section and the key separated by a dot, and the value will be
escaped.

Multiple lines can be added to an option by using the `--append` option.
If you want to update or unset an option which can occur on multiple
lines, a `value-pattern` (which is an extended regular expression,
unless the `--fixed-value` option is given) needs to be given.  Only the
existing values that match the pattern are updated or unset.  If
you want to handle the lines that do *not* match the pattern, just
prepend a single exclamation mark in front (see also <<EXAMPLES>>),
but note that this only works when the `--fixed-value` option is not
in use.

The `--type=<type>` option instructs 'git config' to ensure that incoming and
outgoing values are canonicalize-able under the given <type>.  If no
`--type=<type>` is given, no canonicalization will be performed. Callers may
unset an existing `--type` specifier with `--no-type`.

When reading, the values are read from the system, global and
repository local configuration files by default, and options
`--system`, `--global`, `--local`, `--worktree` and
`--file <filename>` can be used to tell the command to read from only
that location (see <<FILES>>).

When writing, the new value is written to the repository local
configuration file by default, and options `--system`, `--global`,
`--worktree`, `--file <filename>` can be used to tell the command to
write to that location (you can say `--local` but that is the
default).

This command will fail with non-zero status upon error.  Some exit
codes are:

- The section or key is invalid (ret=1),
- no section or name was provided (ret=2),
- the config file is invalid (ret=3),
- the config file cannot be written (ret=4),
- you try to unset an option which does not exist (ret=5),
- you try to unset/set an option for which multiple lines match (ret=5), or
- you try to use an invalid regexp (ret=6).

On success, the command returns the exit code 0.

A list of all available configuration variables can be obtained using the
`git help --config` command.

COMMANDS
--------

list::
	List all variables set in config file, along with their values.

get::
	Emits the value of the specified key. If key is present multiple times
	in the configuration, emits the last value. If `--all` is specified,
	emits all values associated with key. Returns error code 1 if key is
	not present.

set::
	Set value for one or more config options. By default, this command
	refuses to write multi-valued config options. Passing `--all` will
	replace all multi-valued config options with the new value, whereas
	`--value=` will replace all config options whose values match the given
	pattern.

unset::
	Unset value for one or more config options. By default, this command
	refuses to unset multi-valued keys. Passing `--all` will unset all
	multi-valued config options, whereas `--value` will unset all config
	options whose values match the given pattern.

rename-section::
	Rename the given section to a new name.

remove-section::
	Remove the given section from the configuration file.

edit::
	Opens an editor to modify the specified config file; either
	`--system`, `--global`, `--local` (default), `--worktree`, or
	`--file <config-file>`.

[[OPTIONS]]
OPTIONS
-------

--replace-all::
	Default behavior is to replace at most one line. This replaces
	all lines matching the key (and optionally the `value-pattern`).

--append::
	Adds a new line to the option without altering any existing
	values. This is the same as providing '--value=^$' in `set`.

--comment <message>::
	Append a comment at the end of new or modified lines.

	If _<message>_ begins with one or more whitespaces followed
	by "#", it is used as-is.  If it begins with "#", a space is
	prepended before it is used.  Otherwise, a string " # " (a
	space followed by a hash followed by a space) is prepended
	to it.  And the resulting string is placed immediately after
	the value defined for the variable.  The _<message>_ must
	not contain linefeed characters (no multi-line comments are
	permitted).

--all::
	With `get`, return all values for a multi-valued key.

--regexp::
	With `get`, interpret the name as a regular expression. Regular
	expression matching is currently case-sensitive and done against a
	canonicalized version of the key in which section and variable names
	are lowercased, but subsection names are not.

--url=<URL>::
	When given a two-part <name> as <section>.<key>, the value for
	<section>.<URL>.<key> whose <URL> part matches the best to the
	given URL is returned (if no such key exists, the value for
	<section>.<key> is used as a fallback).  When given just the
	<section> as name, do so for all the keys in the section and
	list them.  Returns error code 1 if no value is found.

--global::
	For writing options: write to global `~/.gitconfig` file
	rather than the repository `.git/config`, write to
	`$XDG_CONFIG_HOME/git/config` file if this file exists and the
	`~/.gitconfig` file doesn't.
+
For reading options: read only from global `~/.gitconfig` and from
`$XDG_CONFIG_HOME/git/config` rather than from all available files.
+
See also <<FILES>>.

--system::
	For writing options: write to system-wide
	`$(prefix)/etc/gitconfig` rather than the repository
	`.git/config`.
+
For reading options: read only from system-wide `$(prefix)/etc/gitconfig`
rather than from all available files.
+
See also <<FILES>>.

--local::
	For writing options: write to the repository `.git/config` file.
	This is the default behavior.
+
For reading options: read only from the repository `.git/config` rather than
from all available files.
+
See also <<FILES>>.

--worktree::
	Similar to `--local` except that `$GIT_DIR/config.worktree` is
	read from or written to if `extensions.worktreeConfig` is
	enabled. If not it's the same as `--local`. Note that `$GIT_DIR`
	is equal to `$GIT_COMMON_DIR` for the main working tree, but is of
	the form `$GIT_DIR/worktrees/<id>/` for other working trees. See
	linkgit:git-worktree[1] to learn how to enable
	`extensions.worktreeConfig`.

-f <config-file>::
--file <config-file>::
	For writing options: write to the specified file rather than the
	repository `.git/config`.
+
For reading options: read only from the specified file rather than from all
available files.
+
See also <<FILES>>.

--blob <blob>::
	Similar to `--file` but use the given blob instead of a file. E.g.
	you can use 'master:.gitmodules' to read values from the file
	'.gitmodules' in the master branch. See "SPECIFYING REVISIONS"
	section in linkgit:gitrevisions[7] for a more complete list of
	ways to spell blob names.

--fixed-value::
	When used with the `value-pattern` argument, treat `value-pattern` as
	an exact string instead of a regular expression. This will restrict
	the name/value pairs that are matched to only those where the value
	is exactly equal to the `value-pattern`.

--type <type>::
  'git config' will ensure that any input or output is valid under the given
  type constraint(s), and will canonicalize outgoing values in `<type>`'s
  canonical form.
+
Valid `<type>`'s include:
+
- 'bool': canonicalize values `true`, `yes`,`on`, and positive
  numbers as "true", and values `false`, `no`, `off` and `0` as
  "false".
- 'int': canonicalize values as simple decimal numbers. An optional suffix of
  'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or
  1073741824 upon input.
- 'bool-or-int': canonicalize according to either 'bool' or 'int', as described
  above.
- 'path': canonicalize by expanding a leading `~` to the value of `$HOME` and
  `~user` to the home directory for the specified user. This specifier has no
  effect when setting the value (but you can use `git config section.variable
  ~/` from the command line to let your shell do the expansion.)
- 'expiry-date': canonicalize by converting from a fixed or relative date-string
  to a timestamp. This specifier has no effect when setting the value.
- 'color': When getting a value, canonicalize by converting to an ANSI color
  escape sequence. When setting a value, a sanity-check is performed to ensure
  that the given value is canonicalize-able as an ANSI color, but it is written
  as-is.
+

--bool::
--int::
--bool-or-int::
--path::
--expiry-date::
  Historical options for selecting a type specifier. Prefer instead `--type`
  (see above).

--no-type::
  Un-sets the previously set type specifier (if one was previously set). This
  option requests that 'git config' not canonicalize the retrieved variable.
  `--no-type` has no effect without `--type=<type>` or `--<type>`.

-z::
--null::
	For all options that output values and/or keys, always
	end values with the null character (instead of a
	newline). Use newline instead as a delimiter between
	key and value. This allows for secure parsing of the
	output without getting confused e.g. by values that
	contain line breaks.

--name-only::
	Output only the names of config variables for `list` or
	`get`.

--show-origin::
	Augment the output of all queried config options with the
	origin type (file, standard input, blob, command line) and
	the actual origin (config file path, ref, or blob id if
	applicable).

--show-scope::
	Similar to `--show-origin` in that it augments the output of
	all queried config options with the scope of that value
	(worktree, local, global, system, command).

--get-colorbool <name> [<stdout-is-tty>]::

	Find the color setting for `<name>` (e.g. `color.diff`) and output
	"true" or "false".  `<stdout-is-tty>` should be either "true" or
	"false", and is taken into account when configuration says
	"auto".  If `<stdout-is-tty>` is missing, then checks the standard
	output of the command itself, and exits with status 0 if color
	is to be used, or exits with status 1 otherwise.
	When the color setting for `name` is undefined, the command uses
	`color.ui` as fallback.

--[no-]includes::
	Respect `include.*` directives in config files when looking up
	values. Defaults to `off` when a specific file is given (e.g.,
	using `--file`, `--global`, etc) and `on` when searching all
	config files.

--default <value>::
  When using `get`, and the requested variable is not found, behave as if
  <value> were the value assigned to that variable.

DEPRECATED MODES
----------------

The following modes have been deprecated in favor of subcommands. It is
recommended to migrate to the new syntax.

'git config <name>'::
	Replaced by `git config get <name>`.

'git config <name> <value> [<value-pattern>]'::
	Replaced by `git config set [--value=<pattern>] <name> <value>`.

-l::
--list::
	Replaced by `git config list`.

--get <name> [<value-pattern>]::
	Replaced by `git config get [--value=<pattern>] <name>`.

--get-all <name> [<value-pattern>]::
	Replaced by `git config get [--value=<pattern>] --all <name>`.

--get-regexp <name-regexp>::
	Replaced by `git config get --all --show-names --regexp <name-regexp>`.

--get-urlmatch <name> <URL>::
	Replaced by `git config get --all --show-names --url=<URL> <name>`.

--get-color <name> [<default>]::
	Replaced by `git config get --type=color [--default=<default>] <name>`.

--add <name> <value>::
	Replaced by `git config set --append <name> <value>`.

--unset <name> [<value-pattern>]::
	Replaced by `git config unset [--value=<pattern>] <name>`.

--unset-all <name> [<value-pattern>]::
	Replaced by `git config unset [--value=<pattern>] --all <name>`.

--rename-section <old-name> <new-name>::
	Replaced by `git config rename-section <old-name> <new-name>`.

--remove-section <name>::
	Replaced by `git config remove-section <name>`.

-e::
--edit::
	Replaced by `git config edit`.

CONFIGURATION
-------------
`pager.config` is only respected when listing configuration, i.e., when
using `list` or `get` which may return multiple results. The default is to use
a pager.

[[FILES]]
FILES
-----

By default, 'git config' will read configuration options from multiple
files:

$(prefix)/etc/gitconfig::
	System-wide configuration file.

$XDG_CONFIG_HOME/git/config::
~/.gitconfig::
	User-specific configuration files. When the XDG_CONFIG_HOME environment
	variable is not set or empty, $HOME/.config/ is used as
	$XDG_CONFIG_HOME.
+
These are also called "global" configuration files. If both files exist, both
files are read in the order given above.

$GIT_DIR/config::
	Repository specific configuration file.

$GIT_DIR/config.worktree::
	This is optional and is only searched when
	`extensions.worktreeConfig` is present in $GIT_DIR/config.

You may also provide additional configuration parameters when running any
git command by using the `-c` option. See linkgit:git[1] for details.

Options will be read from all of these files that are available. If the
global or the system-wide configuration files are missing or unreadable they
will be ignored. If the repository configuration file is missing or unreadable,
'git config' will exit with a non-zero error code. An error message is produced
if the file is unreadable, but not if it is missing.

The files are read in the order given above, with last value found taking
precedence over values read earlier.  When multiple values are taken then all
values of a key from all files will be used.

By default, options are only written to the repository specific
configuration file. Note that this also affects options like `set`
and `unset`. *'git config' will only ever change one file at a time*.

You can limit which configuration sources are read from or written to by
specifying the path of a file with the `--file` option, or by specifying a
configuration scope with `--system`, `--global`, `--local`, or `--worktree`.
For more, see <<OPTIONS>> above.

[[SCOPES]]
SCOPES
------

Each configuration source falls within a configuration scope. The scopes
are:

system::
	$(prefix)/etc/gitconfig

global::
	$XDG_CONFIG_HOME/git/config
+
~/.gitconfig

local::
	$GIT_DIR/config

worktree::
	$GIT_DIR/config.worktree

command::
	GIT_CONFIG_{COUNT,KEY,VALUE} environment variables (see <<ENVIRONMENT>>
	below)
+
the `-c` option

With the exception of 'command', each scope corresponds to a command line
option: `--system`, `--global`, `--local`, `--worktree`.

When reading options, specifying a scope will only read options from the
files within that scope. When writing options, specifying a scope will write
to the files within that scope (instead of the repository specific
configuration file). See <<OPTIONS>> above for a complete description.

Most configuration options are respected regardless of the scope it is
defined in, but some options are only respected in certain scopes. See the
respective option's documentation for the full details.

Protected configuration
~~~~~~~~~~~~~~~~~~~~~~~

Protected configuration refers to the 'system', 'global', and 'command' scopes.
For security reasons, certain options are only respected when they are
specified in protected configuration, and ignored otherwise.

Git treats these scopes as if they are controlled by the user or a trusted
administrator. This is because an attacker who controls these scopes can do
substantial harm without using Git, so it is assumed that the user's environment
protects these scopes against attackers.

[[ENVIRONMENT]]
ENVIRONMENT
-----------

GIT_CONFIG_GLOBAL::
GIT_CONFIG_SYSTEM::
	Take the configuration from the given files instead from global or
	system-level configuration. See linkgit:git[1] for details.

GIT_CONFIG_NOSYSTEM::
	Whether to skip reading settings from the system-wide
	$(prefix)/etc/gitconfig file. See linkgit:git[1] for details.

See also <<FILES>>.

GIT_CONFIG_COUNT::
GIT_CONFIG_KEY_<n>::
GIT_CONFIG_VALUE_<n>::
	If GIT_CONFIG_COUNT is set to a positive number, all environment pairs
	GIT_CONFIG_KEY_<n> and GIT_CONFIG_VALUE_<n> up to that number will be
	added to the process's runtime configuration. The config pairs are
	zero-indexed. Any missing key or value is treated as an error. An empty
	GIT_CONFIG_COUNT is treated the same as GIT_CONFIG_COUNT=0, namely no
	pairs are processed. These environment variables will override values
	in configuration files, but will be overridden by any explicit options
	passed via `git -c`.
+
This is useful for cases where you want to spawn multiple git commands
with a common configuration but cannot depend on a configuration file,
for example when writing scripts.

GIT_CONFIG::
	If no `--file` option is provided to `git config`, use the file
	given by `GIT_CONFIG` as if it were provided via `--file`. This
	variable has no effect on other Git commands, and is mostly for
	historical compatibility; there is generally no reason to use it
	instead of the `--file` option.

[[EXAMPLES]]
EXAMPLES
--------

Given a .git/config like this:

------------
#
# This is the config file, and
# a '#' or ';' character indicates
# a comment
#

; core variables
[core]
	; Don't trust file modes
	filemode = false

; Our diff algorithm
[diff]
	external = /usr/local/bin/diff-wrapper
	renames = true

; Proxy settings
[core]
	gitproxy=proxy-command for kernel.org
	gitproxy=default-proxy ; for all the rest

; HTTP
[http]
	sslVerify
[http "https://weak.example.com"]
	sslVerify = false
	cookieFile = /tmp/cookie.txt
------------

you can set the filemode to true with

------------
% git config set core.filemode true
------------

The hypothetical proxy command entries actually have a postfix to discern
what URL they apply to. Here is how to change the entry for kernel.org
to "ssh".

------------
% git config set --value='for kernel.org$' core.gitproxy '"ssh" for kernel.org'
------------

This makes sure that only the key/value pair for kernel.org is replaced.

To delete the entry for renames, do

------------
% git config unset diff.renames
------------

If you want to delete an entry for a multivar (like core.gitproxy above),
you have to provide a regex matching the value of exactly one line.

To query the value for a given key, do

------------
% git config get core.filemode
------------

or, to query a multivar:

------------
% git config get --value="for kernel.org$" core.gitproxy
------------

If you want to know all the values for a multivar, do:

------------
% git config get --all --show-names core.gitproxy
------------

If you like to live dangerously, you can replace *all* core.gitproxy by a
new one with

------------
% git config set --all core.gitproxy ssh
------------

However, if you really only want to replace the line for the default proxy,
i.e. the one without a "for ..." postfix, do something like this:

------------
% git config set --value='! for ' core.gitproxy ssh
------------

To actually match only values with an exclamation mark, you have to

------------
% git config set --value='[!]' section.key value
------------

To add a new proxy, without altering any of the existing ones, use

------------
% git config set --append core.gitproxy '"proxy-command" for example.com'
------------

An example to use customized color from the configuration in your
script:

------------
#!/bin/sh
WS=$(git config get --type=color --default="blue reverse" color.diff.whitespace)
RESET=$(git config get --type=color --default="reset" "")
echo "${WS}your whitespace color or blue reverse${RESET}"
------------

For URLs in `https://weak.example.com`, `http.sslVerify` is set to
false, while it is set to `true` for all others:

------------
% git config get --type=bool --url=https://good.example.com http.sslverify
true
% git config get --type=bool --url=https://weak.example.com http.sslverify
false
% git config get --url=https://weak.example.com http
http.cookieFile /tmp/cookie.txt
http.sslverify false
------------

include::config.adoc[]

BUGS
----
When using the deprecated `[section.subsection]` syntax, changing a value
will result in adding a multi-line key instead of a change, if the subsection
is given with at least one uppercase character. For example when the config
looks like

--------
  [section.subsection]
    key = value1
--------

and running `git config section.Subsection.key value2` will result in

--------
  [section.subsection]
    key = value1
    key = value2
--------


GIT
---
Part of the linkgit:git[1] suite
