git config

このドキュメントでは git config コマンドについて詳しく見ていきます。git config の使い方については「リポジトリのセットアップ」ページで簡単に取り上げています。git config コマンドは、グローバルまたはローカルのプロジェクト レベルで Git の構成値を設定するのに便利な機能です。これらの構成レベルは .gitconfig テキスト ファイルに対応しています。git config を実行すると、構成テキスト ファイルを編集します。ここではメールやユーザー名、エディターなどの一般的な構成設定を取り上げていきます。頻繁に使用する Git 操作のショートカットを作成できる Git エイリアスについても取り上げます。git config とさまざまな Git 構成設定をよく知ることで強力かつ独自の Git ワークフローを作成できるようになります。

使用法

git config の最も基本的な使い方は、このコマンドを構成名とともに呼び出して、その名前の設定値を表示することです。構成名は階層に基づいて「セクション」と「キー」で構成されたドット区切り文字列です。たとえば「user.email」のようになります。

 git config user.email

このサンプルでは、メールはユーザー構成ブロックの子プロパティです。このコマンドによって、構成済みのメールアドレスがある場合はそれが返され、Git によってローカルで作成したコミットに関連付けられます。

Git の構成レベルとファイル

git config の使い方を詳しく見ていく前に、構成レベルについて取り上げます。git config コマンドは引数を受け取るため、どの構成レベルで動作するかを指定できます。次の構成レベルを使用できます。

  • --local

構成オプションが渡されない場合、git config はデフォルトでローカル レベルに書き込みます。git config が呼び出されるコンテキスト リポジトリにローカル レベルの構成が適用されます。ローカル構成の値はリポジトリの .git ディレクトリ (.git/config) のファイルに保存されます。

  • --global

グローバル レベルの構成はユーザー固有のものです。つまり、OS のユーザーに適用されます。グローバル構成の値は、ユーザーのホーム ディレクトリに保存されますが、Unix システムでは ~ /.gitconfig、Windows の場合は C:\Users\<ユーザー名>\.gitconfig になります。

  • --system

システム レベルの構成は、マシン全体に適用されます。OS 上のすべてのユーザーとすべてのリポジトリが対象になります。システム レベルの構成ファイルはシステム ルート パスにはない gitconfig ファイルに存在します。UNIX システムの場合は $(prefix)/etc/gitconfig、Windows XP の場合は、C:\Documents and Settings\All Users\Application Data\Git\config、Windows Vista 以降の場合は C:\ProgramData\Git\config にあります。

つまり、構成レベルの優先順位はローカル、グローバル、システムの順になります。構成値を見つける際、Git はローカル レベルから探し始めてシステム レベルまで上がっていきます。

値の書き込み

これまで説明してきた git config をさらに深く知るために、値が書き込まれたサンプルを見てみましょう。

 git config --global user.email "your_email@example.com"

このサンプルでは、your_email@example.com という値を構成名 user.email に書き込んでいます。ここでは --global フラグを使ってこの値を現在の OS ユーザーに設定しています。

git config editor - core.editor

テキスト エディターを起動して入力を追加できる Git コマンドは数多くあります。git config の最も一般的な使い方は、Git で使うエディターの構成です。以下はよく使われるエディターとそのエディターを指定する git config コマンドの対応関係を示した一覧です。

編集者 config command
Atom ~ git config --global core.editor "atom --wait"~
Emacs ~ git config --global core.editor "emacs"~
nano ~ git config --global core.editor "nano -w"~
vim ~ git config --global core.editor "vim"~
Sublime Text (Mac) ~ git config --global core.editor "subl -n -w"~
Sublime Text (Windows 32-bit 版) ~ git config --global core.editor "'c:/program files (x86)/sublime text 3/sublimetext.exe' -w"~
Sublime Text (Windows 64-bit 版) ~ git config --global core.editor "'c:/program files/sublime text 3/sublimetext.exe' -w"~
Textmate ~ git config --global core.editor "mate -w"~

マージツール

マージの競合が発生すると、Git で「マージ ツール」が起動します。Git はデフォルトでは一般的な Unix 差分プログラムの組み込み機能を使います。組み込みの Git 差分機能ではマージの競合を見るのに最低限の役割しか果たしません。外部のサード パーティ製のマージ競合解決ツールも多数用意されています。さまざまなマージ ツールと構成の概要については、Git で競合を解決するためのヒントとツールに関するガイドを参照してください。

git config --global merge.tool kdiff3

色付けされた出力

Git では出力を読みやすくするターミナル出力の色付けがサポートされています。Git の出力をカスタマイズして好きなカラー テーマを使用できます。git config コマンドでは以下のカラー値を設定できます。

color.ui

Git カラーのマスター変数です。false に設定すると、Git でのターミナル出力への色付けがすべて無効になります。

 $ git config --global color.ui false

デフォルトでは color.ui は auto に設定されていて、ターミナル出力ストリームに色が即座に適用されます。出力ストリームがファイルにリダイレクトされたり、別のプロセスにパイプされたりしている場合は、自動設定によってカラー コード出力は省略されます。

color.ui の値を always に設定すると、出力ストリームがファイルやパイプにリダイレクトされたときでもカラー コード出力を適用できます。ただし、受け取り側のパイプでカラー コード入力が設定されていないと思わぬ問題が発生することがあります。

Git のカラー値

color.ui 以外の方法でも、色をきめ細かく設定できます。これらの方法でも color.ui と同じように、false、auto、always を設定できます。これらの色設定にも固有のカラー値のセットがあります。サポートされているカラー値の一例は次のとおりです:

  • normal
  • yellow
  • magenta
  • cyan
  • 白人

使用しているターミナルでサポートされている場合は、#ff0000 のような 16 進数のカラーコードや ANSI 256 のカラー値でも色を指定できます。

Git の色カラー構成設定

1. color.branch

  • Git ブランチ コマンドの出力色を構成します。

2. color.branch.<スロット>

  • この値は Git ブランチの出力にも適用できます。<スロット> には以下のいずれかが入ります。
    • 1. current: 現在のブランチ
    • 2. local: ローカル ブランチ
    • 3. remote: refs/remotes にあるリモート ブランチの参照
    • 4. upstream: アップストリーム追跡ブランチ
    • 5. プレーン: 他の参照

3. color.diff

  • git diffgit loggit show の出力に色を適用します。

4. color.diff.<スロット>

  • color.diff に続く <スロット> の値を構成して、特定の色をパッチのどの部分に使用するかを git に指定します。
    • 1. context: 差分のコンテキスト テキストです。Git コンテキストは、変更を強調表示した差分またはパッチに表示されるテキスト コンテンツの行です。
    • 2. plain: コンテキストの同義語
    • 3. meta: 差分のメタ情報に色を適用
    • 4. frag:「ブロック ヘッダー」または「ブロック ヘッダーの機能」に色を適用
    • 5. old: 差分で削除された行に色を適用
    • 6. new: 差分の追加された行に色付け
    • 7. commit: 差分内のコミット ヘッダーに色付け
    • 8. 空白: diff の空白エラーの色を設定します

5. color.decorate.<スロット>

  • git log --decorate 出力の色をカスタマイズします。<スロット> に入る値には、branchremoteBranchtagstashHEAD があります。これらの値はそれぞれ、ローカル ブランチ、リモート トラッキング ブランチ、タグ、stash された変更、HEAD に適用できます。

6. color.grep

  • git grep の出力に色を適用します。

7. color.grep.<スロット>

  • git grep にも適用可能です。<スロット> の変数で、grep 出力のどの部分に色を適用するかを指定します。
    • 1. context: コンテキスト行で一致しないテキスト
    • 2. filename: ファイル名のプレフィックス
    • 3. function: 機能名の行
    • 4. linenumber: 行番号のプレフィックス
    • 5. match: 一致するテキスト
    • 6. matchContext: コンテキスト行で一致するテキスト
    • 7. matchSelected: 選択した行で一致するテキスト
    • 8. selected: 選択した行で一致しないテキスト
    • 9. separator: 行のフィールド間 (:、-、および =) およびブロック間 (--) の区切り文字

8. color.interactive

  • この変数は、インタラクティブ プロンプトと表示に色を適用します。git add --interactivegit clean --interactive がその例です。

9. color.interactive.<スロット>

  • <slot> 変数を指定して「インタラクティブな出力」をさらに絞り込んで指定できます。使用可能な <スロット> の値は prompt、header、help、error です。それぞれがインタラクティブな出力に応じた動きをします。

10. color.pager

  • ページャーの使用中に出力への色付けを有効または無効にします。

11. color.showBranch

  • git show branch コマンドの出力への色付けを有効または無効にします。

12. color.status

  • Git ステータスの出力への色付けを有効または無効にするブール値

13. color.status.<slot>

指定された git ステータス要素のカスタム色を指定するために使用されます。<slot> には以下のいずれかが入ります。

  • 1. header
    • ステータス エリアのヘッダー テキストを対象とします
  • 2. added or updated
    • 追加されたがコミットされていない両方の対象ファイル
  • 3. changed
    • 変更されたが git インデックスに追加されていないファイルを対象とします
  • 4. untracked
    • Git によって追跡されないファイルを対象とします
  • 5. branch
    • 現在のブランチに色を適用する
  • 6. nobranch
    • 「ノー ブランチ」警告が表示されているものの色
  • 7. unmerged
    • マージされていない変更があるファイルを色付けします

エイリアス

使用している OS のコマンド ラインにもあるため、エイリアスのコンセプトについては馴染みがあると思います。エイリアスとは長いコマンドを短くしたり、結合コマンドを呼び出すコマンドを定義したりするためのカスタマイズ可能なショートカットです。エイリアスを使うことで時間が短縮でき、よく使うコマンドを入力する手間も省けます。Git には独自のエイリアス システムがあります。Git エイリアスはコミット コマンドの短縮によく使用されます。Git エイリアスは、Git 構成ファイルに保存されています。つまり、git config コマンドを使ってエイリアスを構成できるのです。

 git config --global alias.cicommit

このサンプルでは git commit コマンドの ci エイリアスを作成します。作成が完了したら、git ci を実行して git commit を呼び出せます。また、あるエイリアスから別のエイリアスを参照して強力な連携コマンドを作れます。

 git config --global alias.amend ci --amend

このサンプルでは、--amend flag を使う新しいエイリアスに ci エイリアスを記述するエイリアス修正を作成しています。

書式設定と空白

Git には複数の「空白」機能があります。これを構成することで、git diff 使用時の空白の課題を強調表示できます。空白の課題は構成済みの色 color.diff.whitespace を使って強調表示されます。

以下のフィーチャーはデフォルトで有効となっています。

  • blank-at-eol は行末で孤立している空白を強調表示します
  • space-before-tab は行のインデント時にタブのマークの前に表示されるスペースを強調表示します
  • blank-at-eol はファイルの末尾に挿入された空白行を強調表示します

以下のフィーチャーはデフォルトで無効となっています。

  • indent-with-non-tab はタブではなくスペースでインデントした行を強調表示します
  • tab-in-indent は最初のタブ インデントをエラーとして強調表示します
  • trailing-space は blank-at-eol と blank-at-eof の両方の短縮形です
  • cr-at-eol highlights は行末から行頭に戻す復帰コードです
  • tabwidth= はタブが何文字分の幅を取るかを定義します。デフォルト値は 8 で 1 - 63 までの値を指定できます。

概要

この記事では、git config コマンドの使い方を取り上げました。このコマンドが、ファイル システムにある生の git config ファイルの編集に威力を発揮する方法であることを説明しました。構成オプションの読み方と書き方の基本について見るとともに、一般的な構成パターンについて取り上げました。

  • Git エディターの構成方法
  • 構成レベルを上書きする方法
  • 構成のデフォルトをリセットする方法
  • Git の色をカスタマイズする方法

まとめると、git config はディスク上の生の git config ファイルを簡単に編集できるツールということになります。また、個人用カスタマイズ オプションについて詳しく取り上げました。git 構成オプションの基本的な知識を身に付けておくことが、リポジトリのセット アップを行うための前提条件になります。以下のチュートリアルでは、基本的な操作を実際に試せます。

Git を学習する準備はできていますか?

この対話式チュートリアルを利用しましょう。

今すぐ始める