I\'ve noticed that I have 2 listings for core.autocrlf
when I run git config -l
$ git config -l
core.symlinks=false
core.autocrlf=false
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=name
user.email=email@example.com
core.autocrlf=true
Those last 3 (from user.name down) are the only ones in my c:\\users\\username\\.gitconfig
file. Where are all of the other ones coming from? Why is core.autocrlf listed twice?
This is with msysgit 1.8.3 and I also have SourceTree installed (Windows 7). In SourceTree I have unchecked the \"Allow SourceTree to modify your global Git config files\"
Git checks 4 places for a configuration file:
- Your machine\'s system
.gitconfig
file.
- Your user
.gitconfig
file located at ~/.gitconfig
.
- A second user-specific configuration file located at
$XDG_CONFIG_HOME/git/config
or $HOME/.config/git/config
.
- The local repo\'s config file
.git/config
.
The settings cascade in the following order, with each file adding or overriding settings defined in the file above it.
- System config.
- User config.
- Repo-specific config.
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 repo-specific file has defined by opening up the file .git/config
for that repo.
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.
You don\'t have to guess anymore which config has been set to where, with git 2.8! (March 2016)
See commit 70bd879, commit 473166b, commit 7454ee3, commit 7454ee3 (19 Feb 2016), commit 473166b, commit 7454ee3 (19 Feb 2016), commit 7454ee3 (19 Feb 2016), and commit a0578e0 (17 Feb 2016) by Lars Schneider (larsxschneider
).
(Merged by Junio C Hamano -- gitster
-- in commit dd0f567, 26 Feb 2016)
config: add \'--show-origin
\' option to print the origin of a config value
If config values are queried using \'git config
\' (e.g. via --get
,
--get-all
, --get-regexp
, or --list
flag) then it is sometimes hard to
find the configuration file where the values were defined.
Teach \'git config
\' the \'--show-origin
\' option to print the source
configuration file for every printed value.
The git config
man page will now indicates:
--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).
For example:
git config --list --show-origin
That will return:
file:$HOME/.gitconfig user.global=true
file:$HOME/.gitconfig user.override=global
file:$HOME/.gitconfig include.path=$INCLUDE_DIR/absolute.include
file:$INCLUDE_DIR/absolute.include user.absolute=include
file:.git/config user.local=true
file:.git/config user.override=local
file:.git/config include.path=../include/relative.include
file:.git/../include/relative.include user.relative=include
command line: user.cmdline=true
For one setting, as commented by wisbucky:
git config --show-origin --get-all core.autocrlf
file:\"D:\\\\prgs\\\\git\\\\latest\\\\mingw64/etc/gitconfig\" true
file:C:/Users/vonc/.gitconfig false
After having previously installed Git for Windows and subsequently uninstalling it, I found that there is a configuration file installed at C:\\Users\\All Users\\Git\\config which is a system level config file which persists and will affect any future mingw32 git packages (in my case, I was running a portable mingw32 git package provided by my company). When I ran
git config --system --edit
it would show me the system config file located at mingw32/etc/gitconfig, but would still load the values from the first location as well. This showed up as a warning that configuration values clashed when trying to use git lfs
WARNING: These git config values clash:
git config \"http.sslcainfo\" = \"C:/Users/foo/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt\"
git config \"http.sslcainfo\" = \"/ssl/certs/ca-bundle.crt\"
(Note: this may also be a situation where lfs warnings are being too assertive #861)
Git config -l shows all inherited values from: system, global and local.
So you have another config file somewhere that is being loaded along with your user defined .gitconfig
If you want to find to find the actual file location, it\'ll be in your home directory.
It is hidden and preceded with a \".\".
So if you\'re on a Mac, in your terminal you can cd ~ && open .gitconfig
or open it with your favourite text editor, e.g cd ~ && atom .gitconfig
.