我已经阅读了Git文档和Where do the settings in my Git configuration come from?,但我仍然无法理解我的一些设置。
我在Windows 10上使用的是Git 2.5.3。这是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
这些前十二个设置是硬编码还是平台特定的?我该如何控制它们?
答案 0 :(得分:34)
正如this commit所述,他们为Windows添加了另一个配置位置,甚至在--system
之前就已应用了
文件
/etc/gitconfig
可用于存储系统范围的默认值 组态。在Windows上,配置也可以存储在C:\ProgramData\Git\config
;此文件也将被使用 基于libgit2的软件。...
在Windows上,因为没有中央
/etc/
目录,所以还有 另一个配置文件,用于包含 all 的设置 与机器上运行的Git相关的软件。因此,这个配置 文件的优先级甚至低于$(prefix)/etc/gitconfig
文件。
所以我相信你可以在C:\ProgramData\Git\config
找到那些神秘的设置。
从该提交中我可以看到git config --system --list
应该向您显示这些设置,但似乎缺少C:\Program Files\Git\mingw64/etc/gitconfig
文件会中止操作,这可能是一个错误。
答案 1 :(得分:15)
在我的git版本中,list命令上有一个 - show-origin 开关,用于显示应用设置的位置。我同意令人困惑的是,没有提供开关来访问ProgramData内的Windows配置位置。
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 user.email=karl.horton@yahoo.com
file:C:/Users/karlb/.gitconfig user.name=Karl Horton
答案 2 :(得分:1)
警告有关寡妇的Git。我有git version 2.17.1.windows.2
。
我试图设置一个全局core.attributesfile
来覆盖*.sh
文件的行尾属性(我使用 WSL ,当尝试使用此版本时,当前版本变得非常不满意运行带有DOS(CRLF)行结尾的shell脚本。对于Linux端的Git,~\.gitattributes
中的以下行解决了该问题:
*.sln text eol=crlf
*.bat text eol=crlf
*.sh text eol=cr
但是从Windows端使用Git(例如通过Sourcetree GUI),对于某些存储库,我仍然在* .sh文件中得到CRLF。
我发现在这些存储库中,core.autocrlf=true
。将其设置为input
可以解决问题,Git现在尊重全局 gitattributes 。