Параметры конфигурации Git, специфичные для Windows; где они установлены?

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

Я использую Git 2.5.3 в Windows 10. Вот результат git config -l:

λ git config -l
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/Git/mingw64/ssl/certs/ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=Ben Collins
user.email=#redacted#
alias.sm=submodule
alias.br=branch
alias.co=checkout
alias.st=status
alias.rebuild=!git rm --cached -r . && git reset --hard
core.excludesfile=C:\Users\Benjamin\Documents\gitignore_global.txt
core.editor=c:/Users/Benjamin/AppData/Local/atom/bin/atom.cmd
core.attributesfile=C:\Users\Benjamin\.gitattributes
push.default=simple
merge.tool=p4merge
mergetool.p4merge.cmd=p4merge.exe "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
mergetool.p4merge.path=C:/Program Files/Perforce/p4merge.exe
gui.encoding=utf-8
diff.guitool=p4merge
difftool.p4merge.path=C:/Program Files/Perforce/p4merge.exe
difftool.p4merge.cmd=p4merge.exe "$LOCAL" "$REMOTE"
mergetool.keepbackup=false
rerere.enabled=true
credential.helper=!'C:\Users\Benjamin\AppData\Roaming\GitCredStore\git-credential-winstore.exe'
filter.lfs.clean=git lfs clean %f
filter.lfs.smudge=git lfs smudge %f
filter.lfs.required=true
color.diff.whitespace=red reverse

Что беспокоит, так это то, что первые двенадцать настроек я не могу найти нигде.

C:\Program Files\Git
λ git config --system --list
fatal: unable to read config file 'C:\Program Files\Git\mingw64/etc/gitconfig': No such file or directory
C:\Program Files\Git
λ git config --global --list
user.name=Ben Collins
user.email=#redacted#
alias.sm=submodule
alias.br=branch
alias.co=checkout
alias.st=status
alias.rebuild=!git rm --cached -r . && git reset --hard
core.excludesfile=C:\Users\Benjamin\Documents\gitignore_global.txt
core.editor=c:/Users/Benjamin/AppData/Local/atom/bin/atom.cmd
core.attributesfile=C:\Users\Benjamin\.gitattributes
push.default=simple
merge.tool=p4merge
mergetool.p4merge.cmd=p4merge.exe "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
mergetool.p4merge.path=C:/Program Files/Perforce/p4merge.exe
gui.encoding=utf-8
diff.guitool=p4merge
difftool.p4merge.path=C:/Program Files/Perforce/p4merge.exe
difftool.p4merge.cmd=p4merge.exe "$LOCAL" "$REMOTE"
mergetool.keepbackup=false
rerere.enabled=true
credential.helper=!'C:\Users\Benjamin\AppData\Roaming\GitCredStore\git-credential-winstore.exe'
filter.lfs.clean=git lfs clean %f
filter.lfs.smudge=git lfs smudge %f
filter.lfs.required=true
color.diff.whitespace=red reverse

Кроме того, когда я пытаюсь отключить одну из первых двенадцати настроек, это не дает никакого эффекта:

C:\Users\Benjamin\Projects\blah [master +0 ~1 -0]
λ git config --unset core.autocrlf
C:\Users\Benjamin\Projects\blah [master +0 ~1 -0]
λ git config core.autocrlf
true
C:\Users\Benjamin\Projects\Saddleback\cm-core [master +0 ~1 -0]
λ git config --unset-all core.autocrlf
C:\Users\Benjamin\Projects\Saddleback\cm-core [master +0 ~1 -0]
λ git config core.autocrlf
true

Эти первые двенадцать настроек жестко запрограммированы или как-то зависят от платформы? Как мне получить над ними контроль?


person Ben Collins    schedule 29.09.2015    source источник
comment
Помогло ли это: stackoverflow.com/q/2114111/1190388?   -  person hjpotter92    schedule 29.09.2015
comment
@ hjpotter92, нет - это не о глобальной конфигурации (в $ HOME / .gitconfig). Я довольно хорошо разбираюсь в этом. Кажется, что настройки конфигурации в основном загружаются по порядку, поэтому что-то загружается до глобальной конфигурации, но конфигурация системы не существует. Это и тот факт, что я не могу сбросить эти настройки, является загадкой.   -  person Ben Collins    schedule 29.09.2015
comment
Это могут быть настройки Git по умолчанию для настроек, которые нужно что-то установить. Вместо того, чтобы отключать их, можете ли вы попытаться установить для них что-нибудь еще, например git config core.autocrlf false? Если это сработает, а затем вы отключите core.autocrlf, вернется ли оно к true?   -  person Chris    schedule 29.09.2015
comment
@Chris, это отличная мысль, но как мне сделать так, чтобы было что-то значимое? AFAIK, нет git config --mystery core.autocrlf false ;-)   -  person Ben Collins    schedule 29.09.2015
comment
@BenCollins, я не понимаю, что вы имеете в виду. Разве git config --global core.autocrlf false не имеет смысла, если ему удастся изменить значение? И последующий git config --global --unset core.autocrlf, если он вернет вас в ваше текущее состояние?   -  person Chris    schedule 29.09.2015
comment
@Chris, ваш вопрос также подчеркивает еще один интересный факт: если я установил core.autocrlf в значение false в локальном репозитории, он действительно появится в списке конфигураций - во второй раз. Затем он разрешится, но эта первая запись все еще существует и по-прежнему имеет значение true, даже когда я ее отменяю.   -  person Ben Collins    schedule 29.09.2015
comment
@Chris: да, это имеет смысл в том смысле, что я могу переопределить значение в более низкой конфигурации, но суть моего вопроса заключается в том, что есть некоторая более высокая, безымянная, неприкасаемая конфигурация, и я хочу контролировать ее.   -  person Ben Collins    schedule 29.09.2015
comment
@BenCollins, понял. Помогает ли параметр --edit как предлагается здесь?   -  person Chris    schedule 29.09.2015
comment
К сожалению нет. Он открывает ожидаемые файлы, но я уже знал о них.   -  person Ben Collins    schedule 29.09.2015
comment
Если это кому-то поможет, я смог найти это место, прежде чем найти этот вопрос с помощью git config --show-origin -l   -  person ardila    schedule 12.07.2016
comment
Даже git config --system core.autocrlf false в администраторе Git Bash у меня не работал. Мне пришлось открыть файл в ProgramData и изменить его вручную.   -  person PatPeter    schedule 30.12.2019


Ответы (3)


Как объясняется в этом коммите, они добавили другое расположение конфигурации только для Windows , который применяется еще до --system:

Файл /etc/gitconfig может использоваться для хранения общесистемной конфигурации по умолчанию. В Windows конфигурацию также можно сохранить в C:\ProgramData\Git\config; Этот файл также будет использоваться программным обеспечением на основе libgit2.

...

В Windows, поскольку нет центрального /etc/ каталога, есть еще один файл конфигурации, предназначенный для хранения настроек для всего связанного с Git программного обеспечения, работающего на машине. Следовательно, этот файл конфигурации имеет еще более низкий приоритет, чем файл $(prefix)/etc/gitconfig.

Так что я считаю, что вы можете найти эти загадочные настройки в C:\ProgramData\Git\config.


Из этого коммита я вижу, что git config --system --list должен был показать вам эти настройки, но похоже, что отсутствие файла C:\Program Files\Git\mingw64/etc/gitconfig прервало операцию, что, вероятно, является ошибкой.

person Roman    schedule 29.09.2015
comment
У этого ответа нет и того, сколько голосов он заслуживает :) PS. У меня есть системный файл gitconfig, но я не вижу ничего в git config --system --list, кроме того, что находится в этом файле (я не вижу хорошо скрытого файла программных данных) - person andrei.serea; 06.05.2016
comment
Обратите внимание, что начиная с Git версии 2.17, похоже, нет возможности командной строки для изменения настроек в C: \ ProgramData \ Git \ config. Этот файл, по-видимому, по умолчанию заблокирован только для прав администратора, поэтому мне нужно было выполнить контекстное меню Запуск от имени администратора в ярлыке моего редактора (Notepad ++), а затем отредактировать его напрямую. - person satyagraha; 12.05.2018
comment
›› Этот файл также будет использоваться программным обеспечением на основе libgit2. ‹< Очень странно, что настройки из C: \ ProgramData \ Git \ Config отображаются в списке, но не отображаются при использовании любого из трех переключателей: --system, --global, --local. - person Triynko; 20.11.2018
comment
Начиная с версии 2.23.0 это больше не так. Теперь это место C:\Program Files\Git\etc\gitconfig. См. github.com/git-for-windows/build -extra / blob / master / - person user202472; 04.09.2020

В моей версии git в команде list есть переключатель --show-origin, который показывает, откуда был применен параметр. Я согласен, что сбивает с толку отсутствие переключателя для доступа к расположению конфигурации Windows внутри ProgramData.

C:\Users\karlb>git --version
git version 2.11.0.windows.3

C:\Users\karlb>git config --list --show-origin
file:"C:\\ProgramData/Git/config"       core.symlinks=false
file:"C:\\ProgramData/Git/config"       core.autocrlf=true
file:"C:\\ProgramData/Git/config"       core.fscache=true
file:"C:\\ProgramData/Git/config"       color.diff=auto
file:"C:\\ProgramData/Git/config"       color.status=auto
file:"C:\\ProgramData/Git/config"       color.branch=auto
file:"C:\\ProgramData/Git/config"       color.interactive=true
file:"C:\\ProgramData/Git/config"       help.format=html
file:"C:\\ProgramData/Git/config"       http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
file:"C:\\ProgramData/Git/config"       diff.astextplain.textconv=astextplain
file:"C:\\ProgramData/Git/config"       rebase.autosquash=true
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    credential.helper=manager
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    difftool.usebuiltin=true
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    alias.lol=log --oneline --graph
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    alias.last=log -1 HEAD
file:C:/Users/karlb/.gitconfig  [email protected]
file:C:/Users/karlb/.gitconfig  user.name=Karl Horton
person Karl Horton    schedule 21.03.2017
comment
Очень странно, что настройки из C: \ ProgramData \ Git \ Config отображаются в списке, но не отображаются при использовании любого из трех переключателей: --system, --global, --local. - person Triynko; 20.11.2018
comment
Вроде не по теме, но в программе git отсутствует понятие происхождения по умолчанию (которое мы можем найти, например, в GNU make, чтобы узнать, откуда берется значение переменной). Например, мы не можем определить, является ли core.symlinks истинным или ложным, если это явно не определено в каком-либо файле конфигурации. Я подозреваю, что по умолчанию это неверно только в Windows, но в этом отношении список следует сделать более дружелюбным и предоставить возможность перечислить все эффективные параметры. Даже команда --get ничего вам не говорит. - person Johan Boulé; 28.12.2020

ПРЕДУПРЕЖДЕНИЕ относительно Git для вдов. У меня git version 2.17.1.windows.2.

Я попытался установить глобальный core.attributesfile, чтобы переопределить атрибуты окончания строки для файлов *.sh (я использую WSL, и текущая версия становится очень неудовлетворительной, когда она пытается запустить сценарии оболочки с окончанием строки DOS (CRLF) . Для Git на стороне Linux следующие строки в ~\.gitattributes решают проблему:

*.sln text eol=crlf
*.bat text eol=crlf
*.sh  text eol=cr

Но, используя Git со стороны Windows (например, через графический интерфейс Sourcetree), для некоторых репозиториев я все еще получал CRLF в файлах * .sh.

Я обнаружил, что в этих репозиториях core.autocrlf=true. Установка input решает проблему, и теперь Git уважает глобальные gitattributes.

person Alex Cohn    schedule 30.01.2019
comment
Стоит разобраться в этом подробнее; .gitattributes должен иметь приоритет над core.autocrlf всегда. - person Edward Thomson; 30.01.2019
comment
@EdwardThomson, ты имеешь в виду, это может быть опубликовано как отчет об ошибке? - person Alex Cohn; 30.01.2019
comment
Может быть? Я думаю, что вопрос о переполнении стека может быть хорошим началом. например, отличается ли его поведение в Sourcetree от командной строки? Как точно выглядит ваш файл конфигурации? (Например, вы упоминаете ~\.gitattributes, который не может быть правильным путем к вашему домашнему каталогу.) - person Edward Thomson; 30.01.2019
comment
???? хорошие вопросы! Здесь я только суммировал выводы и упомянул некоторые детали (например, Sourcetree), которые могут помочь тому, кто пользуется Google, решить ее загадку. Естественно, я проверил, что командная строка и графический интерфейс дают одинаковые результаты. И глобальные атрибуты gitattribute в Windows выставляются правильно через git configure --global. - person Alex Cohn; 30.01.2019