为什么Git配置列表(总计)与system + global + local不同

时间:2015-12-05 22:12:02

标签: git

在Windows上的Git 2.6.3上,为什么会出现这个命令:

git config --list

与其他人不一样:

git config --list --system
git config --list --global
git config --list --local

第一个列出的选项多于其他选项的总和。我已经重定向到文件和kdiff比较,并且存在差异。

根据要求,这是git config --list中的值,而不是系统/全局/本地分组中的值:

core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=C:/Program Files (x86)/Git/mingw32/ssl/certs/ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true

上面引用的配置(不在系统/全局/本地)值保存在哪里?

2 个答案:

答案 0 :(得分:17)

TL; DR C:\Users\All Users\Git\config
git-for-windows PR 470

  

在Windows上,由于没有中央/etc/目录,还有另一个配置文件(位于%PROGRAMDATA%\Git\config),旨在包含   机器上运行的所有 Git相关软件的设置   所以,   此配置文件的优先级甚至低于$(prefix)/etc/gitconfig文件。

您可以通过输入

来检查(使用git 2.8 +,2016年3月)
git config --list --show-origin

请参阅" Where do the settings in my Git configuration come from?"

git config FILES中所述,git在3个地方(git repo本身之外)寻找配置的值(如果没有找到默认值)

$(prefix)/etc/gitconfig
  

系统范围的配置文件。

$XDG_CONFIG_HOME/git/config
  

第二个特定于用户的配置文件   如果$XDG_CONFIG_HOME未设置或为空,则将使用$HOME/.config/git/config。此文件中设置的任何单值变量都将被~/.gitconfig中的任何内容覆盖。如果您有时使用旧版本的Git,最好不要创建此文件,因为最近才添加对此文件的支持。

~/.gitconfig
  

特定于用户的配置文件。也被称为"全球"配置文件。

但是quick process monitor提到第四个位置(再次,在git repo本身之外)

programdata

C:\ProgramData\Git中,我看到了额外的值:

C:\ProgramData\Git>more config
[core]
        symlinks = false
        autocrlf = true
[color]
        diff = auto
        status = auto
        branch = auto
        interactive = true
[pack]
        packSizeLimit = 2g
[help]
        format = html
[http]
        sslCAInfo = C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
[sendemail]
        smtpserver = /bin/msmtp.exe

[diff "astextplain"]
        textconv = astextplain
[rebase]
        autosquash = true

如" What is the significance of the ProgramData folder in Windows?"中所述,该文件夹是来自All Users的文件夹:

C:\Users\All Users\Git>dir
 Volume in drive C has no label.

 Directory of C:\Users\All Users\Git

23/10/2015  16:36    <DIR>          .
23/10/2015  16:36    <DIR>          ..
23/10/2015  16:36               350 config

答案 1 :(得分:0)

Git从三个不同的配置文件中读取值。

  1. 系统 - 此文件中的配置值将应用于计算机上的所有用户。
  2. 全局 - 此文件中的配置值应用于单个用户。该文件位于&#39;〜/ .gitconfig&#39;。此文件可用于覆盖系统配置文件设置的配置值。
  3. Local - 此文件中的值适用于单个存储库。此文件位于&#39; .git / config&#39;。此文件可用于覆盖由全局和系统配置文件设置的配置值。
  4. 例如,您将git install配置为使用您的电子邮件地址

    git config --global user.email xyz@example.com
    

    现在你正在开发一个项目。此特定项目要求您使用不同的电子邮件地址abc@example.com。但所有其他项目仍然使用xyz@example.com。您可以使用

    设置特定存储库的电子邮件地址
    git config --local user.email acb@example.com
    

    Git读取所有三个配置文件,并组合所有文件中的配置值,以提供最终的配置值集。如果git没有在最后一组配置值中找到所需git配置变量的值,那么它将使用变量的默认内部值。