Подтвердить что ты не робот

Настройки конфигурации 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

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

4b9b3361

Ответ 1

Как объясняет этот коммит, они добавили еще одно местоположение конфигурации только для 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 операцию, которая наверное ошибка.

Ответ 2

В моей версии git есть переключатель - 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

Ответ 3

TIL предостережение относительно 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 GUI), для некоторых репозиториев я все еще получал CRLF в *.sh файлах.

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