解説
Gitの設定はどこから来た?show-originとshow-scopeで変更前に確認する
リポジトリごとにGitの挙動が違うとき、設定を書き直す前に出所を確認。global・local・一回限りの指定を、架空の項目だけで安全に比べよう。

同じGitの操作なのに、あるリポジトリだけ設定が違う。すぐに設定を書き直す前に、値がどこから読み込まれたかを確認しよう。今回は設定項目を一つに絞り、出所と適用範囲を読む方法を試すよ。
必要なのはGitの入った端末と、新しい空の練習フォルダー。最初にgit --versionで手元の版を確認しよう。Gitの設定を全部表示すると、共有すべきでない値が含まれる場合もある。この記事では架空の項目demo.labelだけを対象にする。実際の認証や送信先の設定は変更しない。
値・出所・範囲を分けて読む
Gitでは端末側の設定やリポジトリ固有の設定などを読み込む。--show-originは設定の出所、--show-scopeはglobal・local・commandなどの範囲を表示する指定だよ。
同じ名前の項目が複数の場所にあることもある。--allを付けた一覧と、一つの値を取得する結果は区別しよう。今回の架空項目の例を、複数値を扱うすべての設定へそのまま当てはめないでね。
空の練習リポジトリで一つだけ設定する
新しい空のフォルダーを作り、ターミナルでその中へ移動してから実行する。同名の既存フォルダーを使い回さないようにしよう。
git init -q
git config set --local demo.label from-local
git config get --show-origin --show-scope --all demo.label
新しいリポジトリだけに架空の値を保存する。出力では、local、.git/config、from-localが対応する。環境によって区切りはタブとして見えるよ。
local file:.git/config from-local
編集部では通常の利用者設定を読む代わりに、隔離した練習用global設定を別ファイルへ用意し、globalとlocalの二つがそれぞれの出所付きで表示されることを確認した。普段使うglobal設定へ練習値を追加する必要はないよ。
その一回だけの指定と比べる
次はファイルへ保存する設定を変えずに、その一回のGitコマンドへ値を渡す。
git -c demo.label=from-command config get demo.label
git config get demo.label
隔離した確認では、順番にfrom-command、from-localが表示された。最初の-cは後続のGitコマンドに渡す指定で、二回目へ同じ値を永続保存するものではないよ。
設定の画面やファイルだけでなく、呼び出し元のスクリプトがコマンドへ値を渡していないかも、確認対象になるね。
実際の設定を調べる順番
- 症状が出るリポジトリの中で作業しているか確認する。
- 調べる設定項目の名前を公式マニュアルで確かめる。
- その項目だけを
git config get --show-origin --show-scope --all 項目名で読む。 - 値が複数あるなら、出所と範囲を控える。
- その設定が単一の値か複数値か、読み取り方も公式仕様で確かめる。
- 変更が必要と分かってから、対象の範囲と戻し方を決める。
共有するメモには秘密の値や個人のパスをそのまま貼らず、必要な情報だけを残そう。出力がない場合も、項目が未設定なのか、名前の綴りが違うのか、コマンドが失敗したのかを分けて確認する。
読む操作と、保存する操作は別
getは取得、setは設定値を保存するための操作。今回の練習を戻すなら、練習リポジトリの中でgit config unset --local demo.labelを実行し、同じ取得コマンドでlocalの値が出なくなることを確認する。ほかの範囲に同名の値がある場合は、それまで消えるわけではないよ。
古いGitでget・setのサブコマンドが使えない場合は、手元のgit config -hと対応版の公式資料を確認する。この記事のためだけに、本番のGitや利用者設定を一括更新する必要はない。
比較する変更の場所は作業中・ステージ・コミットの差分、個別の設定が原因か確かめる前の状態確認はGitの履歴を読む方法へ。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。