Почему Git список конфигурации (всего) не совпадает с именем system + global + local

В Git 2.6.3 в Windows, почему эта команда:

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

Где хранится эта конфигурация, указанная выше (не в системном/глобальном/локальном)?

Ответ 1

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 года), набрав

git config --list --show-origin

См. "Откуда выполняются настройки в моей конфигурации git?"


Как упоминалось в git config FILES, git ищет значения (или значения по умолчанию, если не найдены) конфигураций в трех местах (вне самого репозитория git)

$(prefix)/etc/gitconfig

Системный файл конфигурации.

$XDG_CONFIG_HOME/git/config

Второй пользовательский файл конфигурации.
Если $XDG_CONFIG_HOME не задано или пусто, будет использоваться $HOME/.config/git/config. Любая однозначная переменная, заданная в этом файле, будет перезаписана всем, что находится в ~/.gitconfig. Не рекомендуется создавать этот файл, если вы иногда используете более старые версии Git, так как поддержка этого файла была добавлена ​​довольно недавно.

~/.gitconfig

Пользовательский файл конфигурации. Также называется "глобальным" конфигурационным файлом.

Но быстрый монитор процесса упоминает четвертое место (опять же вне самого репозитория git)

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

Как упоминалось в "Каково значение папки ProgramData в 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

Ответ 2

Git считывает значения из трех разных файлов конфигурации.

  • Система - значения конфигурации в этом файле применяются ко всем пользователям на машине.
  • Global - значения конфигурации в этом файле применяются к одному пользователю. Этот файл находится в '~/.gitconfig'. Этот файл можно использовать для перезаписывания значения конфигурации, заданного конфигурационным файлом системы.
  • Локальный - значения в этом файле относятся к одному репозиторию. Этот файл находится в '.git/config'. Этот файл может использоваться для перезаписывания значений конфигурации, заданных глобальными и конфигурационными файлами системы.

Например, вы настраиваете свою установку git для использования своего адреса электронной почты

git config --global user.email [email protected]

Теперь вы работаете над проектом. Этот конкретный проект требует, чтобы вы использовали другой адрес электронной почты [email protected] Но все остальные проекты по-прежнему используют [email protected] Вы можете установить адрес электронной почты для определенного репозитория, используя

git config --local user.email [email protected]

Git считывает все три файла конфигурации и объединяет значения конфигурации из всех файлов, чтобы получить окончательный набор значений конфигурации. Если git не находит значения для требуемых переменных конфигурации git в конечном наборе значений конфигурации, тогда он будет использовать внутренние значения по умолчанию для переменных.