IT系/リファレンス/Gitコマンド/git_config

Last-modified: 2020-05-23 (土) 18:43:11

git config

Gitの設定を表示、変更する。

用例

  • 設定の表示:userセクションのemailキーを表示
    git config user.email
  • local, system, globalそれぞれにおける項目の設定値を確認
    git config --local remote.origin.url
    git config --global user.email
    git config --system http.sslbackend
  • 設定の一覧表示(コマンドを実行した場所で有効になっている設定項目とその設定値すべて)
    git config -l
    git config --list
  • 設定の変更:userセクションのnameキーに"Bankura"と設定
    git config --global user.name "Bankura"
  • 設定ファイルをエディタで直接編集(ローカルの設定を変更)
    git config -e
    git config --edit
  • 特定の設定ファイルに対して表示・設定を行う(「-f」オプションを使ってファイルを指定。通常local, system, globalオプションを使えば問題ない)
    git config -l -f "C:\Program Files\Git\mingw64\etc\gitconfig"
  • 設定されているユーザー名を全て取得
    git config --get-all user.name

書式

git config [options] [name] [value]

公式によると以下の通り。

git config [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] name [value [value_regex]]
git config [<file-option>] [--type=<type>] --add name value
git config [<file-option>] [--type=<type>] --replace-all name value [value_regex]
git config [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] --get name [value_regex]
git config [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] --get-all name [value_regex]
git config [<file-option>] [--type=<type>] [--show-origin] [--show-scope] [-z|--null] [--name-only] --get-regexp name_regex [value_regex]
git config [<file-option>] [--type=<type>] [-z|--null] --get-urlmatch name URL
git config [<file-option>] --unset name [value_regex]
git config [<file-option>] --unset-all name [value_regex]
git config [<file-option>] --rename-section old_name new_name
git config [<file-option>] --remove-section name
git config [<file-option>] [--show-origin] [--show-scope] [-z|--null] [--name-only] -l | --list
git config [<file-option>] --get-color name [default]
git config [<file-option>] --get-colorbool name [stdout-is-tty]
git config [<file-option>] -e | --edit

options

file-option--localLocalレベル(リポジトリ内)の設定内容を対象とする。デフォルト。
--globalGlobalレベル(ユーザー内)の設定内容を対象とする。
--systemSystemレベル(システム全体)の設定内容を対象とする。
--worktreeextensions.worktreeConfigが存在する場合に.git/config.worktreeが読み書きされることを除いて、--localと同様。
-f | --file <filename>設定ファイルを指定する。
--blob <blob>--fileに類似するが、ファイルの代わりに指定したBLOBを使用する。例えば、master:.gitmodulesを使ってmasterブランチの「.gitmodules」から値を読込可能。
--type指定した<type>で表示・設定時の入出力値に対し型チェックを行い、正規化(正規の形式に変換)する。
<type>に指定できる型は、「bool」「int」「bool-or-int」「path」「expiry-date」「color」。「path」「expiry-date」は表示時のみ有効。
--no-type--type=と併用。以前に設定された型指定子を設定解除する。
-l | --list設定一覧を表示する。
-e | --edit設定ファイルを編集する。
--show-originorigin type(ファイル、標準入力、blob、コマンドライン)と actual origin(設定ファイルパス、ref、または該当する場合はblob id)を使用して、すべての照会オプションの出力を拡張する。
要するにどの設定ファイルの設定項目かが分かるように、表示結果に設定ファイルのパス等が出力されるようになる。
--show-scopeその値のスコープ(ローカル、グローバル、システム、コマンド)ですべて照会オプションの出力を拡張する。
要するにどのスコープの設定項目かが分かるように表示結果に、スコープが出力されるようになる。
-z | --null設定値を(改行ではなく)常にヌル文字で終了する。
キーと値の間の区切り文字として代わりに改行を使用。(改行を含む値によって混乱することなく、安全に出力を解析可能)
--addname,valueで指定される設定を追加する。省略した場合も基本--addとして扱われる。
--replace-allname (およびオプションのvalue_regex)に一致するキー名すべての行の設定値をvalueに置き換える。
--getnameで指定された設定項目の値を表示する。
オプション[value_regex]を指定すると、値と一致する正規表現によってフィルタリングする。
キーが見つからなかった場合はエラーコード1を返し、複数のキー値が見つかった場合は最後の値を返す。
--get-allnameで指定された設定項目の値を全て表示する。同じnameを複数設定する、多値キー(multi-valued key)の値を取得する際に使用する。
--name-only--listまたは--get-regexpと併用。設定項目の名前のみを出力する。
--get-regexpget-allと類似しているが、name_regex名前を正規表現として解釈し、設定項目の値を全て表示する。
--get-urlmatchgitconfig のセクションにはURLごとの設定が可能(section.keyという構成のnameの場合、sectionにURLを指定することができる(後述))。
get-urlmatch では指定したURLにURL属性が最もマッチするsectionから対象の設定項目の値を取得する。(マッチするsectionがない場合は、URL属性が設定されていないsectionのnameの設定値を取得する。)
nameにsectionのみの値が指定された場合は、section内のkeyの設定値をリストで返却する。設定値がなければエラーコード: 1を返却する。
--unsetnameで指定された設定値をクリアする。
--unset-allnameで指定された設定値を全てクリアする。
--rename-section指定されたセクションの名称を変更する。
--remove-section指定されたセクションの設定項目を削除する。
--get-colornameで指定された設定項目のカラー設定(color.diff.newなど)を探し、ANSIカラーエスケープシーケンスとして出力する。
--get-colorboolnameで指定された設定項目のカラー設定(color.diffなど)を探し、「true」または「false」を出力する。
--[no-]includes設定値の検索を行う際に、設定ファイルの「include.*」の項目を有効にする。
--default <value>-get使用時に併用。要求された設定項目が見つからない場合、<value>の値をその設定項目の値の代わりに使用する。
--helpコマンドのヘルプを表示する。

説明

  • Gitの設定(ユーザー名やメールアドレスなど)を表示・設定・置換・設定解除する。
  • 設定値は設定ファイルに書かれているため、設定ファイルを直接変更することでも変更は可能。
    (ファイルを壊す可能性があるので、-eオプションで編集する)
  • 設定値の適用範囲(System:システム全体、Global:ユーザー内、Local:リポジトリ内)毎に設定ファイルが分かれる。同じ設定値がある場合は、適用範囲が狭い方の設定が優先される。
  • Localレベルの設定を対象とする場合は、カレントディレクトリを対象リポジトリ内に移動してから実行する必要がある。
  • コマンドオプションで適用範囲を指定しない場合、読取りオプションのコマンドでは全設定ファイルの設定値に対して処理を実行する。

Gitの設定レベルの種類と設定ファイルの場所(system, global, local)

Gitの設定レベルは以下の3種類。

種類適用範囲場所の例備考
systemシステム全体(全ユーザーの全リポジトリ)UNIX系: /etc/gitconfig
Windows: C:\Program Files\Git\mingw64\etc\gitconfig
-
global該当ユーザーの全リポジトリUNIX系: ~/.gitconfig
Windows: C:\Users\<ユーザ名>\.gitconfig  
ホーム直下
local該当リポジトリUNIX/Windows: repository/.git/configリポジトリの.git直下

system, global, localの順に読み込まれる。例えば、systemとlocalで同じ項目が設定されている場合はlocalの値が有効になる。
設定ファイルの場所は、一例であり、Gitがバンドルされるアプリにより異なる。

設定項目

  • コマンドで指定する設定項目名はドットで区切られたセクションとキーで構成される(ex: section.key, section1.section2.key)。
  • 設定項目は数多く存在する。よく使われる設定項目は以下。
    設定項目説明備考
    color.uiGitの出力の色分け(通常はautoを設定)-
    core.editorコミットメッセージなどの編集で用いるエディタ-
    user.nameユーザー名-
    user.emailEメールアドレス-

リポジトリURLごとの設定

Gitの設定はファイル(~/.gitconfig等)に記述できるが、 Git 1.8.5からはリポジトリURLごとの設定が書けるようになった。
以下は、git-configのman pageに掲載されているリポジトリのホスト名によってhttp.sslVerifyを切り替える例。

[http]
    sslVerify
[http "https://weak.example.com"]
    sslVerify = false
    cookieFile = /tmp/cookie.txt

git configの--get-urlmatchオプションでは、このURLの属性にマッチする値を取得する。

設定ファイルの記載内容

設定ファイルの記載内容は以下のようになっている。公式より引用。

#
# This is the config file, and
# a '#' or ';' character indicates
# a comment
#
;
; core variables
[core]
	; Don't trust file modes
	filemode = false
;
; Our diff algorithm
[diff]
	external = /usr/local/bin/diff-wrapper
	renames = true
;
; Proxy settings
[core]
	gitproxy=proxy-command for kernel.org
	gitproxy=default-proxy ; for all the rest
;
; HTTP
[http]
	sslVerify
[http "https://weak.example.com"]
	sslVerify = false
	cookieFile = /tmp/cookie.txt

上記設定ファイルへのコマンド実行例

  • filemodeをtrueに変更するには
    git config core.filemode true
  • gitproxyのkernel.orgのエントリを "ssh"に変更するには
    git config core.gitproxy '"ssh" for kernel.org' 'for kernel.org$'
  • diff.renamesのエントリを削除するには
    git config --unset diff.renames
  • core.filemodeの設定値を確認するには
    git config --get core.filemode
    または
    git config core.filemode
  • 多項目値を条件を指定して確認するには
    git config --get core.gitproxy "for kernel.org$"
  • 多項目値のすべての値を知りたい場合は
    git config --get-all core.gitproxy

関連

  • gitコマンド

参考リンク

その他メモ

  • git configの user.emailの存在意義
    もともとgitはLinuxカーネルの構成管理の目的で作られたツールであるため、どこのだれが変更を行ったのか、連絡が取れる必要があった。
    そのため、個人のプロジェクトで使う分には、emailなどは不要だが、慣例的に一応ユーザ名とセットで設定するようにしている。
    GitHubやBitbucketではuser.emailを使ってどのユーザのコミット履歴として扱うか決めている模様(なので自己申告でコロコロ変わるHNよりもメアドの方が重要)。
    (参考:https://teratail.com/questions/123116