Help us understand the problem. What is going on with this article?

Gitで有効な設定を確認したい

More than 3 years have passed since last update.

Gitの設定は三つの異なるファイルに格納できます.
用途によって設定値を使い分けることができ大変便利な反面、設定項目が増えてくると「有効な設定値は何?」「どのファイルから読み込まれた設定値なの?」といった混乱が生じます.

git config --valid-listのような標準機能は提供されていない1ため、--name-only--show-originのオプションで対処したいと思います.

結論

git config --listの振る舞い

システム設定>グローバル設定>リポジトリ設定の順番に、設定項目を一覧します.
重複した設定項目はすべて出力され、最後に表示された設定値が有効な設定値となります.

~/.gitconfig
[core]
  ignorecase = false
  whitespace = trailing-space,space-before-tab
.git/config
[core]
  ignorecase = true
  whitespace = trailing-space
$ git config --list
core.ignorecase=false
core.whitespace=trailing-space,space-before-tab
core.ignorecase=true           # これが有効
core.whitespace=trailing-space # これが有効

--name-onlyオプション

git config --listに指定すれば、設定項目の名前だけを一覧できます.

$ git config --list --name-only
core.ignorecase
core.whitespace
core.ignorecase
core.whitespace

--show-origin(Mac/Linux限定)

git config --listに指定すれば、設定項目が定義されたファイル名と有効な設定値を一覧できます.
※Git for Windows2に同梱されたGitではこのオプションはありませんでした

$ git config --list --show-origin
file:/Users/xxx/.gitconfig  core.ignorecase=false
file:/Users/xxx/.gitconfig  core.whitespace=trailing-space,space-before-tab
file:.git/config    core.ignorecase=true
file:.git/config    core.whitespace=trailing-space

有効な設定だけを重複なく一覧する方法(Mac)

このスクリプトで、設定項目を解決したファイル名と有効な設定値を重複なく一覧できます.

list_valid-gitconfig.sh
for KEY in `git config --list --name-only | sort | uniq`; do
    VALUE=(`git config --show-origin $KEY`)
    FILE=${VALUE[0]}
    unset VALUE[0]
    [ ${#VALUES[*]} = 0 ] && VALUE="" || VALUE=${VALUES[*]}
    echo -e "$FILE\\t$KEY=[$VALUE]"
done
出力
file:/Users/xxx/.gitconfig  core.ignorecase=[true]
file:.git/config    core.whitespace=[trailing-space]

一覧する項目を指定できる完全版は こちら

有効な設定だけを一覧する方法(Windows)

Windowsでは --show-originオプションが使えないため、設定項目を解決したファイル名は確認できません.
uniqコマンドも使えないため設定項目の重複も解消できませんが、有効な設定値だけを一覧表示することはできます.
あまり便利ではありませんが、有効な値を探さなくても良くなるため一応掲載します.

list_valid-gitconfig.bat
for /f "usebackq" %%i in (`git config --list --name-only`) do (
    call :ECHO_CONFIG %%i
)
goto :eof

:ECHO_CONFIG
    set KEY=%~1
    set /p NULL=%KEY% = < nul
    git config %KEY%
    goto :eof
出力
core.ignorecase = true
core.whitespace = trailing-space
core.ignorecase = true
core.whitespace = trailing-space

aliasとのコラボレーション

前述した処理をファイルに保存してエイリアス定義すれば、もう少し幸せになれます.

git config alias.configv '!/usr/local/bin/list-valid-gitconfig.sh' # 外部コマンドを示す `!`が必要
git configv
出力
file:/Users/xxx/.gitconfig  core.ignorecase=[true]
file:.git/config    core.whitespace=[trailing-space]

おまけ:有効な設定だけを重複なく一覧する方法(Mac:完全版)

このスクリプトで、設定項目を解決したファイル名と有効な設定値を重複なく一覧できます.
設定項目名のパターンをパラメータに渡すことで、指定した設定項目だけを一覧することもできます.

list_valid-gitconfig.sh
#!/bin/bash -u
# ##########################################################
# 機  能:有効なGit設定を一覧する
# 引  数:$1 省略可)一覧する設定名のパターンを正規表現で指定する
#                    省略された場合は、すべての設定を一覧する
# 戻り値:なし
[ $# = 0 ] && PATTERNS=(".") || PATTERNS=($*)

for KEY in `git config --list --name-only | sort | uniq`; do
    while :
    do
        for PATTERN in ${PATTERNS[*]}; do
            [[ "$KEY" =~ .*$PATTERN.* ]] && break 2
        done
        continue 2
    done

    VALUE=(`git config --show-origin $KEY`)
    FILE=${VALUE[0]}
    unset VALUE[0]
    [ ${#VALUES[*]} = 0 ] && VALUE="" || VALUE=${VALUES[*]}
    echo -e "$FILE\\t$KEY=[$VALUE]"
done
出力
$ git configv
file:/Users/xxx/.gitconfig  core.ignorecase=[true]
file:.git/config    core.whitespace=[trailing-space]
出力
$ git configv ignore
file:/Users/xxx/.gitconfig  core.ignorecase=[true]

  1. 標準機能で提供してほしいなぁ 

  2. Git for Windows v2.7.2で確認しました 

dhun
気づけばそろそろ四十路. 疲れがとれにくくなってきたけど、まだまだ現役プログラマーです ヽ(^。^)ノ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした