我的Gitconfiguration中的设置来自哪里?
我注意到,当我运行git config -l
时,我有2个core.autocrlf
清单
$ 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
那些最后3(从user.name下来)是唯一在我的c:\users\username\.gitconfig
文件。 其他的来自哪里? 为什么core.autocrlf列出两次?
这是与msysgit 1.8.3,我也有安装SourceTree(Windows 7)。 在SourceTree中,我没有选中“允许SourceTree修改你的全局Gitconfiguration文件”
Git检查4个地方的configuration文件:
- 你的机器的系统
.gitconfig
文件。 - 您的用户
.gitconfig
文件位于~/.gitconfig
。 - 第二个用户特定的configuration文件位于
$XDG_CONFIG_HOME/git/config
或$HOME/.config/git/config
。 - 本地回购的configuration文件
.git/config
。
设置按以下顺序级联,每个文件添加或覆盖上面文件中定义的设置。
- 系统configuration。
- 用户configuration。
- 特定于回复的configuration
您可以使用以下命令查看每个文件的定义:
# 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
您可以通过打开文件.git/config
来查看该回购专用文件已定义的内容。
如果您在Windows上使用msysgit,那么如果您从Windows命令提示符使用echo %homepath%
,则可能会发现您的用户~/.gitconfig
文件,其中%homepath%
指向的位置。
从git config
的文档 :
如果没有用
--file
明确设置,git config
将会search四个文件来searchconfiguration选项:
$(prefix)/etc/gitconfig
系统范围的configuration文件。
$XDG_CONFIG_HOME/git/config
第二个用户特定的configuration文件。 如果
$XDG_CONFIG_HOME
未设置或为空,则使用$HOME/.config/git/config
。 在这个文件中设置的任何单值variables将被~/.gitconfig
任何内容覆盖。 如果你有时使用旧版本的Git,不要创build这个文件,因为这个文件的支持最近被添加了。
~/.gitconfig
用户特定的configuration文件。 也称为“全局”configuration文件。
$GIT_DIR/config
存储库特定的configuration文件。
如果没有进一步的选项,所有的阅读选项将读取所有这些可用的文件。 如果全局configuration文件或全系统configuration文件不可用,它们将被忽略。 如果版本库configuration文件不可用或不可读,那么
git config
会以一个非零的错误码退出。 但是,在任何情况下都不会发出错误消息。这些文件按照上面给出的顺序读取,其中最后一个值优先于先前读取的值。 当多个值被采用时,将使用来自所有文件的密钥的所有值。
所有的写入选项将默认写入存储库特定的configuration文件。 请注意,这也会影响像
--unset
--replace-all
和--unset
这样的选项。git config
一次只能更改一个文件。您可以通过命令行选项或环境variables覆盖这些规则。
--global
和--system
选项将分别限制用于全局文件或系统范围文件的文件。GIT_CONFIG
环境variables有类似的效果,但是你可以指定你想要的任何文件名。
你不必猜测哪个configuration已经设置到哪里,用git 2.8! (2016年3月)
参见提交70bd879 , 提交473166b , 提交7454ee3 , 提交7454ee3 (2016年2月19日), 提交473166b , 提交7454ee3 (2016年2月19日), 提交7454ee3 (2016年2月19日)和提交a0578e0 (2016年2月17日)作者Lars Schneider( larsxschneider
) 。
(由Junio C gitster
合并- gitster
– in dd0f567 ,2016年2月26日)
config:添加'
--show-origin
'选项来打印configuration值的来源如果使用'
git config
'(例如,通过--get
,–--get-all
,–--get-regexp
或--list
标志)来查询configuration值,那么有时很难find定义值的configuration文件。教'
git config
'的'--show-origin
'选项来打印每个打印的值的源configuration文件。
git config
手册页现在将显示:
--show-origin:
使用原始types(文件,标准input,blob,命令行)和实际原点(configuration文件path,ref或blob id,如果适用)扩大所有查询的configuration选项的输出。
例如:
git -c 'user.cmdline=true' config --list --show-origin
这将返回:
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
之前已经安装了Git for Windows ,然后卸载它,我发现有一个configuration文件安装在C:\用户\所有用户\ Git \configuration这是一个系统级configuration文件保持并将影响任何未来的mingw32 git包(就我而言,我正在运行我公司提供的便携式mingw32 git软件包)。 当我跑了
git config --system --edit
它会显示位于mingw32 / etc / gitconfig中的系统configuration文件,但仍会从第一个位置加载值。 这显示了一个警告,configuration值在尝试使用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"
(注意:这也可能是lfs警告过于自信的情况#861 )
Git config -l显示来自system,global和local的所有inheritance的值。
所以你有另一个configuration文件,正在加载你的用户定义的.gitconfig