web-dev-qa-db-ja.com

Windows固有のGit構成設定。彼らはどこに設定されていますか?

私はGitのドキュメントと Git構成の設定はどこから来るのですか? を読みましたが、それでも一部の設定を理解できません。

私は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

厄介なのは、最初の12個の設定anywhereが見つからないことです。

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

また、最初の12個の設定の1つを解除しようとしても、効果がありません。

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

これらの最初の12の設定は、ハードコードされているか、プラットフォーム固有のものですか?どうすればそれらを制御できますか?

28
Ben Collins

this commit が説明するように、Windows専用の別の構成場所が追加されました。これは、_--system_の前にも適用されます。

ファイル_/etc/gitconfig_を使用して、システム全体のデフォルト設定を保存できます。 Windowsでは、設定は_C:\ProgramData\Git\config_にも保存できます。このファイルは、libgit2ベースのソフトウェアでも使用されます。

...

Windowsでは、中央の_/etc/_ディレクトリがないため、allGit関連ソフトウェアの設定を含むことを目的としたさらに別の構成ファイルがありますマシンで実行されています。したがって、この構成ファイルは$(prefix)/etc/gitconfigファイルよりも優先順位が低くなります。

これらのミステリー設定は_C:\ProgramData\Git\config_にあると思います。


そのコミットから、_git config --system --list_がそれらの設定を表示しているはずですが、_C:\Program Files\Git\mingw64/etc/gitconfig_ファイルがないために操作が中止されたようです。これはおそらくバグです。

36
Roman

私のバージョンの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  [email protected]
file:C:/Users/karlb/.gitconfig  user.name=Karl Horton
18
Karl Horton

未亡人のGitに関する警告。 git version 2.17.1.windows.2があります。

グローバルcore.attributesfileを設定して、*.shファイルの行末属性をオーバーライドしようとしました(私は[〜#〜] wsl [〜#〜]、DOS(CRLF)の行末でシェルスクリプトを実行しようとすると、現在のバージョンは非常に不満になります。Linux側のGitの場合、~\.gitattributesの次の行で問題が解決されます。

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

しかし、Windows側から(例えば、Sourcetree GUIを介して)Gitを使用すると、一部のリポジトリーでは、*。shファイルでCRLFがまだ取得されていました。

これらのリポジトリでcore.autocrlf=trueが見つかりました。 inputに設定すると問題が解決し、Gitはグローバルgitattributesを尊重します。

2
Alex Cohn