我的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文件:

  1. 你的机器的系统.gitconfig文件。
  2. 您的用户.gitconfig文件位于~/.gitconfig
  3. 第二个用户特定的configuration文件位于$XDG_CONFIG_HOME/git/config$HOME/.config/git/config
  4. 本地回购的configuration文件.git/config

设置按以下顺序级联,每个文件添加或覆盖上面文件中定义的设置。

  1. 系统configuration。
  2. 用户configuration。
  3. 特定于回复的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