git を使っているとよく遭遇する「autocrlf どう設定する?」問題について、詳細を忘れた頃にまた相談を受け、またまた色々と調べて理解が深まり折角なのでメモっておきます。今回は git config について、です。
ゴール
結局のところ、現在、有効になっている設定は何?を確認したい。また、それはどこで設定されている値が生きてるの?(どこを変更すれば変えられるの?)を理解したい。
現在の設定値は?
対象の設定Keyが明確な場合
特定の設定 key
について、現在、有効になっている設定を確認したい場合は、下記のコマンドを入力すればいい。
$ git config [key]
ex.)
$ git config core.autocrlf
false
全ての設定を確認したい場合
設定されている全ての値を確認したい場合は、下記のコマンドを実行する。
$ git config --list
ただし、設定が Key=Value 形式で大量に出てくるので面食らう。しかも、同一のKeyが何回か繰り返し出てきたりして、どれが正しい設定なの?ってなる。
答えを言うと、一番最後に出てきた設定が、有効になっている。のだが、これについてもう少し解説しておく。
gitconfig の設定は3段階
git の config 情報の設定は、3段階に分かれている。システム全体 system
と、ユーザ全体 global
と、対象リポジトリのみ local
ですな。
設定は、 system, global, local の順に読み込まれ、最後に読み込まれた設定で上書きされるため、よりスコープの狭い設定が有効になる。
それぞれの設定箇所の内容をリスト出力するには git config
コマンドにオプションを追加すればいい。例えば global の場合は
$ git config --global --list
ということを踏まえて、前述のコマンドで大量に出力されていた内容をよく見てみると
$ git config --list
(git config --system --list の内容)
(git config --global --list の内容)
(git config --local --list の内容)
という感じになっていることが分かる。
実際の設定ファイルはどこに
それぞれの設定ファイルの場所は、以下の通り。
local
対象リポジトリ内の .git/config
global
ログインユーザのHOMEディレクトリ配下の .gitconfig
OS | .gitconfig path |
---|---|
Linux/Mac | ~/.gitconfig |
Win |
[home]¥.gitconfig (通常は C:¥Users¥[user]¥.gitconfig ) |
system
git インストールディレクトリの gitconfig
ファイルだが、どんなアプリにバンドルされた git か?によって場所はまちまちの模様。
OS | gitconfig path |
---|---|
Win | C:¥development¥tools¥Git¥etc¥gitconfig |
Win | C:¥Users¥[myUser]¥AppData¥Local¥Atlassian¥SourceTree¥git_local¥mingw32¥etc¥gitconfig |
Win | C:¥Program Files (x86)¥Git¥etc¥gitconfig |
Win | C:¥Program Files¥Git¥mingw64¥etc¥gitconfig |
Mac | /usr/local/git/etc/gitconfig |
実運用でよく使うのは
system はシステムデフォルトを表しているので、ここに手をいれることはあまりないと思います。また、local はリポジトリごとに設定ができるので、あるリポジトリだけ固有の設定をしたい場合は使うと思いますが、これもそんなにはないケースかと。最も利用するのは、おそらくユーザ設定である global だと思います。
設定コマンドと設定ファイルの対比
git の導入ガイドで最初に設定しなさいと、よく書かれている
$ git config --global user.name "My Name"
$ git config --global user.email myname@example.com
という記述ですが、これを読み解くと global
設定の user
セクションに name
というKeyで "My Name" という値を設定する。というコマンドですね。これにより ~/.gitconfig
には、下記のように設定が書き込まれます。
[user]
name = "My Name"
email = myname@example.com
以上です。少しはgitconfigの理解の助けになればと思います。