Откуда берутся настройки в моей конфигурации Git?
Я заметил, что у меня есть два списка для core.autocrlf
, когда я запускаю 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
[email protected]
core.autocrlf=true
Эти последние три (от user.name и ниже) являются единственными в моем файле C:\users\username\.gitconfig
. Откуда все остальные? Почему core.autocrlf указан дважды?
Это с MSysGit 1.8.3, и у меня также установлен Sourcetree (Windows 7). В Sourcetree я снял флажок "Разрешить Sourcetree изменять ваши глобальные файлы конфигурации Git"
Ответы
Ответ 1
Git проверяет четыре места для файла конфигурации:
- Файл
.gitconfig
вашей машины.
- Ваш пользовательский файл
.gitconfig
находится в ~/.gitconfig
.
- Второй пользовательский файл конфигурации, расположенный в
$XDG_CONFIG_HOME/git/config
или $HOME/.config/git/config
.
- Файл конфигурации локального репозитория
.git/config
.
Параметры располагаются в следующем порядке, каждый файл добавляет или переопределяет параметры, определенные в файле над ним.
- Конфигурация системы.
- Конфигурация пользователя.
- Специфичная для репозитория конфигурация.
Вы можете увидеть, что каждый файл определил, используя следующие команды:
# 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
для этого репозитория.
Если вы используете MSysGit в Windows, вы, вероятно, найдете свой пользовательский файл ~/.gitconfig
, на который всегда указывает %homepath%
, если вы используете echo %homepath%
из командной строки Windows.
Из документации для git config
:
Если явно не установить с помощью --file
, существует четыре файла, в которых git config
будет искать параметры конфигурации:
Второй пользовательский файл конфигурации. Если $XDG_CONFIG_HOME
не установлен или пуст, будет использоваться $HOME/.config/git/config
. Любые переменная с одним значением, установленная в этом файле, будет перезаписана что бы ни было в ~/.gitconfig
. Это хорошая идея, чтобы не создавать это файл, если вы иногда используете более старые версии Git, в качестве поддержки этого файл был добавлен сравнительно недавно.
Пользовательский файл конфигурации. Также называется "глобальной" конфигурацией файл.
Если дальнейшие параметры не указаны, все параметры чтения будут читать все эти файлы, которые доступны. Если глобальный или общесистемный файл конфигурации недоступен, они будут игнорироваться. Если файл конфигурации репозитория недоступен или не читается, git config
завершит работу с ненулевым кодом ошибки. Однако ни в том, ни в другом случае будет выдано сообщение об ошибке.
Файлы читаются в порядке, указанном выше, с последним найденным значением имеет приоритет над значениями, прочитанными ранее. Когда несколько значений взятые тогда будут использованы все значения ключа из всех файлов.
Все параметры записи по умолчанию будут записываться в репозиторий конфигурационный файл. Обратите внимание, что это также влияет на такие параметры, как --replace-all
и --unset
. git config
только изменится один файл за раз.
Вы можете переопределить эти правила с помощью параметров командной строки или переменные среды Опции --global
и --system
будут ограничить используемый файл глобальным или общесистемным файлом соответственно. Переменная окружения GIT_CONFIG
имеет аналогичный эффект, но вы Можно указать любое имя файла.
Ответ 2
Вам больше не нужно угадывать, какой конфиг был установлен, где, с git 2.8! (Март 2016 г.)
См. коммит 70bd879, коммит 473166b, коммит 7454ee3, коммит 7454ee3 (19 февраля 2016 г.), коммит 473166b зафиксировать 7454ee3 (19 февраля 2016 г.), зафиксировать 7454ee3 (19 февраля 2016 г.) и зафиксировать a0578e0 (17 февраля 2016 г.) от Ларс Шнайдер ( larsxschneider
) .
(Merged by Junio C Hamano -- [TG41] -- in commit dd0f567, 26 Feb 2016)
config: добавьте опцию "--show-origin
" для печати источника значения конфигурации
Если значения конфигурации запрашиваются с помощью "git config
" (например, через --get
, --get-all
, --get-regexp
или --list
), тогда иногда бывает трудно найдите файл конфигурации, в котором были определены значения.
Научите "git config
" опции "--show-origin
", чтобы напечатать источник файл конфигурации для каждого напечатанного значения.
На
странице справочника git config
man page теперь отображается:
--show-origin:
Дополните выходные данные всех запрашиваемых параметров конфигурации типом источника (файл, стандартный ввод, большой двоичный объект, командная строка) и фактическим источником (путь к файлу конфигурации, ref или идентификатор большого двоичного объекта, если применимо).
Например:
git 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
Для одного параметра, как прокомментировал wisbucky:
git config --show-origin --get-all core.autocrlf
file:"D:\\prgs\\git\\latest\\mingw64/etc/gitconfig" true
file:C:/Users/vonc/.gitconfig false
Ответ 3
После предварительной установки Git для Windows и последующей ее деинсталляции я обнаружил, что на C:\Users\All Users\Git\config
установлен файл конфигурации, который является файлом конфигурации системного уровня, который сохраняется и повлияет на все будущие пакеты MinGW32 Git (в в моем случае я использовал переносной пакет MinGW32 Git, предоставленный моей компанией). Когда я побежал
git config --system --edit
это покажет мне файл конфигурации системы, расположенный
в mingw32/etc/gitconfig
, но он все равно будет загружать значения из первого местоположения. Это стало предупреждением о конфликте значений конфигурации при попытке использовать 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)
Ответ 4
git config -l
показывает все унаследованные значения из системных, глобальных и локальных.
Итак, у вас есть другой файл конфигурации, который загружается вместе с вашим пользовательским файлом .gitconfig
.
Ответ 5
Вы можете использовать --show-origin
, чтобы узнать, откуда берутся конфигурации.
Приоритет файлов конфигурации в Git для Windows:
...
$PROGRAMDATA/Git/config
::
(Только для Windows) Общесистемная конфигурация файл поделился с другими реализациями Git. Обычно $PROGRAMDATA
указывает на C:\ProgramData
.
$(prefix)/etc/gitconfig
::
Общесистемный файл конфигурации. (Только для Windows) Этот файл содержит только те настройки, которые специально для этой установки Git для Windows и который должен не может использоваться совместно с другими реализациями Git, такими как JGit, libgit2. --system
выберет этот файл.
$XDG_CONFIG_HOME/git/config
::
Вторая пользовательская конфигурация файл. Если $XDG_CONFIG_HOME
не установлен или пуст, $HOME/.config/git/config
будет использоваться. Любая однозначная переменная набор в этом файле будет перезаписан любым ~/.gitconfig
. Не рекомендуется создавать этот файл, если вы иногда использовать более старые версии Git, так как поддержка этого файла была добавлено сравнительно недавно.
~/.gitconfig
::
Пользовательский файл конфигурации. Также называется "глобальным" файл конфигурации.
$GIT_DIR/config
::
Конфигурационный файл репозитория.
...
Файлы читаются в порядке, указанном выше, с последним найденным значением имеет приоритет перед значениями, прочитанными ранее.
...
Источник: https://github.com/git-for-windows/git/blob/[email protected]%7B2018-01-07%7D/Documentation/git-config.txt#L231
$PROGRAMDATA
является переменной среды. Вы можете получить значение этих переменных следующим образом:
В Git Bash вам нужно использовать echo "$ProgramData"
.
В CMD вам нужно использовать echo %PROGRAMDATA%
.
Обратите внимание, что Git Bash, видимо, делает вид, что переменные окружения чувствительны к регистру.
Что такое $(prefix)
?
Префикс - это каталог верхнего уровня, в который все устанавливается. В Git для Windows это либо <some-path>/mingw64
, либо <some-path>/mingw32
.
Ответ 6
Полный ответ для Windows (то есть версия принятого ответа для Windows):
Как и в Linux, Windows имеет четыре уровня конфигурационных файлов/настроек, и три являются прямыми эквивалентами. Важно отметить еще одну - "Все приложения/пользователи" - особенно потому, что именно здесь установщик устанавливает значения, например, 'core.autocrlf = true', но к нему нельзя получить доступ из командной строки, поэтому это вызывает путаницу.
Все приложения и пользователи
Это похоже на общую версию version системных настроек, если у вас установлено несколько приложений Git. Для доступа к ним нет команды 'git config', но они все равно влияют на чистый результат для параметра.
Расположение файла конфигурации:
C:\ProgramData\Git\Config
(Обратите внимание, что "ProgramData" в предыдущих версиях Windows было "Все пользователи".)
система
Расположение файла конфигурации:
C: /Program Files/Git/mingw64/etc/gitconfig
$ git config --system --list
User
пользователяРасположение файла конфигурации:
% USERPROFILE%.gitconfig
(Это разрешается как "C: /Users/& lt; username>")
$ git config --global --list
Repository
Расположение файла конфигурации:
[текущий каталог репозитория]/. git/config
$ git config --local --list
Ответ 7
В Windows 7 (может быть, такой же или похожей для Windows 10), для Visual Studio и командной строки Git ваша глобальная конфигурация находится в:
%USERPROFILE%\.gitconfig
(точка перед именем файла)
Но это не соблюдается Sourcetree, по крайней мере, в режиме Git Embedded, и конфигурация находится в:
%USERPROFILE%\AppData\Local\Atlassian\SourceTree\git_local\mingw32\etc\gitconfig
(без точки перед именем файла)
(Мне нужно было обновить оба файла, чтобы изменить мои глобальные настройки Git для команды Git и Sourcetree.)
Еще одна забавная часть. Конфигурация перехватчиков Git работала из местоположения AppData\Local\...
, но после дополнительных исследований с помощью Process Monitor я заметил, что Sourcetree также загружает глобальные данные с диска, сопоставленного с компанией, для моего пользователя.
Это имеет очень мало смысла, так как очень немногие приложения ищут это местоположение, но почему-то это делает Sourcetree, поэтому, если вы не можете заставить его работать с настройками местоположения в Sourcetree, запустите Process Monitor и создайте правило для регистрации только пути, содержащего gitconfig, и вы можно найти, где на самом деле ваша глобальная конфигурация в случае сетевого каталога пользователя.
И это может даже не быть ошибкой Sourcetree, так как теперь я вижу, как я пишу это, что git.exe загружает это, но это происходит только для git.exe, выполняемого Sourcetree, в то время как Git использует прямую командную строку %USERPROFILE%\.gitconfig
Наконец, я взял все результаты из Process Monitor, вставил их в SQL Server и запустил запрос, чтобы получить отчетливые результаты (без определенного порядка выполнения, просто отсортированного по пути):
Я не знаю, как эти конфигурации связаны друг с другом, но я знаю, что некоторые переопределяют другие, некоторые настройки работают из одного местоположения, некоторые из другого.
И приведенный выше список вызывается Sourcetree, опять же, прямая командная строка с Git, кажется, прекрасно работает с %USERPROFILE%\.gitconfig
, и этого нет в этом списке, но это будет выглядеть так (в Windows 7) C:\Users\pawel.cioch\.gitconfig
Ответ 8
Если вы хотите найти, чтобы найти фактическое местоположение файла, оно будет находиться в вашем домашнем каталоге.
Он скрыт и ему предшествует ".".
Итак, если вы находитесь на Mac, в своем терминале вы можете cd ~ && open .gitconfig
или открыть его с помощью своего любимого текстового редактора, например cd ~ && atom .gitconfig
.