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、Window の場合は 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 コマンドの対応関係を示した一覧です。

Editor 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
  • black
  • red
  • green
  • yellow
  • blue
  • magenta
  • cyan
  • white

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

Git の色カラー構成設定

1. color.branch 

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

2. color.branch.<スロット

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

3. color.diff

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

4. color.diff <スロット

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

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.<スロット>

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

10. color.pager

  • ページャーを使用中に色を有効または無効にします

11. color.showBranch

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

12. color.status 

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

13. color.status.<スロット>

指定した Git ステータス要素に使う色の指定に使います。<スロット> には以下の値が入ります:

  • 1. header
    • ステータスエリアのヘッダーテキストを対象にする
  • 2. added または updated
    • 追加されてコミットされていない両方のターゲットファイル
  • 3. changed
    • 編集されて git インデックスに追加されていないターゲットファイル
  • 4. untracked
    • Git でトラッキングしていないターゲットファイル
  • 5. branch
    • 現在のブランチに色を適用
  • 6. nobranch
    • 「ブランチがありません」という警告メッセージのテキストの色
  • 7. unmerged
    • マージされていない変更があるファイルの色

エイリアス

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

git config --global alias.ci commit

このサンプルでは 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-eof: ファイル末尾に挿入された空白行を強調表示します。

デフォルトでは以下の機能が無効になっています。

  • indent-with-non-tab: タブではなくスペースでインデントされた行を強調表示します。
  • tab-in-indent: エラーになっている最初のタブのインデントを強調表示します。
  • trailing-space: blank-at-eol と blank-at-eof の簡易版です。
  • cr-at-eol: 行末のキャリッジリターンを強調表示します。
  • tabwidth=<n>: タブが何文字分の幅を取るかを定義します。デフォルトの値は 8 で、1 ~ 63 までの値を指定できます。

概要

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

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

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

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

この対話式のチュートリアルをお試しください。

今すぐ始める