Where do the settings in my Git configuration come from?

Git checks four places for a configuration file:

  1. Your machine’s system .gitconfig file.
  2. Your user .gitconfig file located at ~/.gitconfig.
  3. A second user-specific configuration file located at $XDG_CONFIG_HOME/git/config or $HOME/.config/git/config.
  4. The local repository’s configuration file .git/config.

The settings cascade in the following order, with each file adding or overriding settings defined in the file above it.

  1. System configuration.
  2. User configuration.
  3. Repository-specific configuration.

You can see what each file has defined using the following commands:

# System, applies to entire machine and all users
$ git config --system --list
$ git config --system --edit

# User defined
$ git config --global --list
$ git config --global --edit

You can see what just the repository-specific file has defined by opening up the file .git/config for that repository.

If you’re using MSysGit on Windows, you’ll probably find your user ~/.gitconfig file where ever %homepath% points to if you use echo %homepath% from a Windows command prompt.

From the documentation for git config:

If not set explicitly with --file, there are four files where git config will search for configuration options:

  • $(prefix)/etc/gitconfig

    System-wide configuration file.

  • $XDG_CONFIG_HOME/git/config

Second user-specific configuration file. If $XDG_CONFIG_HOME is
not set or empty, $HOME/.config/git/config will be used. Any
single-valued variable set in this file will be overwritten by
whatever is in ~/.gitconfig. It is a good idea not to create this
file if you sometimes use older versions of Git, as support for this
file was added fairly recently.

  • ~/.gitconfig

User-specific configuration file. Also called “global” configuration
file.

  • $GIT_DIR/config

    Repository specific configuration file.

If no further options are given, all reading options will read all of
these files that are available. If the global or the system-wide
configuration file are not available they will be ignored. If the
repository configuration file is not available or readable, git config will exit with a non-zero error code. However, in neither case
will an error message be issued.

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.

All writing options will per default write to the repository specific
configuration file. Note that this also affects options like
--replace-all and --unset. git config will only ever change
one file at a time.

You can override these rules either by command-line options or by
environment variables. The --global and the --system options will
limit the file used to the global or system-wide file respectively.
The GIT_CONFIG environment variable has a similar effect, but you
can specify any filename you want.

Leave a Comment