問題
Unix系OSならば、git config --list
の出力は、
# 全ユーザで共有している設定を出力する
git config --system --list
# ユーザ固有の設定を出力する
git config --global --list
# リポジトリ固有の設定を出力する
git config --local --list
の3つのコマンドを続けて実行したときと同じものになるはずである。
ところが、Git for Windows 2.7.0のGit Bashで同じコマンドを実行してみると、
$ git config --list
core.symlinks=false
core.autocrlf=false
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
diff.astextplain.textconv=astextplain
rebase.autosquash=true
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
$ git config --system --list
fatal: unable to read config file 'C:\Program Files\Git\mingw64/etc/gitconfig': No such file or directory
$ git config --global --list
$ git config --local --list
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
git config --list
にあったcore.symlinks
からrebase.autosquash
までの設定が--system
にも--global
にも--local
にも見当たらない。
これらの設定はいったいどこで定義されているのだろうか?
答え
Git for Windows 2.xは全ユーザで共有している設定を保存する第二のファイルを持っており、そちらに定義されている。
$ git config --file /c/ProgramData/git/config --list
core.symlinks=false
core.autocrlf=false
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
diff.astextplain.textconv=astextplain
rebase.autosquash=true
Git for Windows 2.xは次の順で設定ファイルを読み込む。(下のファイルに書かれた設定の方が優先順位が高い)
- C:\ProgramData\git\config(
git config --file /c/ProgramData/git/config
で読み書き可能) - C:\Program Files\Git\mingw64\etc\gitconfig(
git config --system
で読み書き可能) - C:\Users\(ユーザ名)\.gitconfig(
git config --global
で読み書き可能) -
(Gitリポジトリへのパス)\.git\config(
git config --local
で読み書き可能)
全ユーザで共有している設定を保存するファイルが2つある理由はよく分からなかった。