DESIGN / CODE / INFRA / AI

解説

Gitの設定はどこから来た?show-originとshow-scopeで変更前に確認する

リポジトリごとにGitの挙動が違うとき、設定を書き直す前に出所を確認。global・local・一回限りの指定を、架空の項目だけで安全に比べよう。

Gitの設定はどこから来た?show-originとshow-scopeで変更前に確認する
保存リストを見る →
この記事の道しるべ 5項目

同じ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コマンドに渡す指定で、二回目へ同じ値を永続保存するものではないよ。

設定の画面やファイルだけでなく、呼び出し元のスクリプトがコマンドへ値を渡していないかも、確認対象になるね。

実際の設定を調べる順番

  1. 症状が出るリポジトリの中で作業しているか確認する。
  2. 調べる設定項目の名前を公式マニュアルで確かめる。
  3. その項目だけをgit config get --show-origin --show-scope --all 項目名で読む。
  4. 値が複数あるなら、出所と範囲を控える。
  5. その設定が単一の値か複数値か、読み取り方も公式仕様で確かめる。
  6. 変更が必要と分かってから、対象の範囲と戻し方を決める。

共有するメモには秘密の値や個人のパスをそのまま貼らず、必要な情報だけを残そう。出力がない場合も、項目が未設定なのか、名前の綴りが違うのか、コマンドが失敗したのかを分けて確認する。

読む操作と、保存する操作は別

getは取得、setは設定値を保存するための操作。今回の練習を戻すなら、練習リポジトリの中でgit config unset --local demo.labelを実行し、同じ取得コマンドでlocalの値が出なくなることを確認する。ほかの範囲に同名の値がある場合は、それまで消えるわけではないよ。

古いGitでget・setのサブコマンドが使えない場合は、手元のgit config -hと対応版の公式資料を確認する。この記事のためだけに、本番のGitや利用者設定を一括更新する必要はない。

比較する変更の場所は作業中・ステージ・コミットの差分、個別の設定が原因か確かめる前の状態確認はGitの履歴を読む方法へ。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。