Gitの設定編（一）　git configの概要と使い方

## 環境と前提条件

### 【動作環境】
 - OS： Windows 10
 - Git： git version 2.30.1.windows.1
 - コマンドLineツール： GitBash mintty 3.4.4

#### 【前提条件】
 - Gitが既にシステムにインストール済
 - Gitのインストール先： C:\Program Files\Git\
 - Windowsのユーザフォルダ： C:\Users\hayashi.hirohumi\
 - ローカル作業フォルダ： C:\gittest-repo\

## 概要

### 【最初のGitの構成】
　　Gitがシステムにインストールした直後、まずはgit configで初期設定を行う。該当作業はしなくても使えるかもしれないが、Gitをもっと上手に使いこなすため、ちょっとカスタマイズしたほうがよいでしょう。該当作業は一度だけ行えばずっと有効である。すなわち、面倒な作業はただ1回だけ行えば、その後のGit人生は楽になる。更に、Gitをアップグレードしても設定は引き継がれるので、再設定は不要である。

## Gitの設定を表示・変更する

### 【書式1】Gitの設定一覧を表示します。

```bash
$ git config [--system|--global|--local|-f <config_file> ] [--show-origin] -l
```

### 【Optionの詳細】

 - 最初のオプション[--system | --global | --local | -f <config_ file> ]は、システム(OS)、ユーザ、あるいはリポジトリの単位で設定の有効範囲を指定します。

```bash
# ユーザ範囲の設定一覧を表示する。
# -lは--listの省略形
$ git config --global -l

# 実行結果
http.sslverify=false
user.name=hayashi.hirohumi
user.email=hayashi.hirohumi@xxxx.com
core.autocrlf=false
credential.helper=manager-core
```

|  option  |  有効範囲  |  デフォルト格納場所  |
| ---- | ---- | ---- |
|  --system  |  システムを使用するすべてのユーザに有効な設定。 |C:/Program Files/Git/etc/gitconfig|
|  --global  |  OSユーザ固有の設定。  |C:/Users/hayashi.hirohumi/.gitconfig|
|  --local  |  リポジトリ固有の設定。（ デフォルト）。  |.git/config ※リポジトリのフォルダ直下に隠しフォルダ.gitが存在している|

 - [--show-origin]はどの設定がどのファイルで行われているのか表示する。

```bash
# 作業フォルダ「C:\gittest-repo\」の直下に、下記のコマンドを実行すると、
# すべて有効範囲の設定一覧が表示されます。
$ git config --show-origin -l

# 実行結果
file:C:/Program Files/Git/etc/gitconfig diff.astextplain.textconv=astextplain
#...省略（※systemの設定一覧）
file:C:/Users/hayashi.hirohumi/.gitconfig       http.sslverify=false
file:C:/Users/hayashi.hirohumi/.gitconfig       user.name=hayashi.hirohumi
#...省略（※globalの設定一覧）
file:.git/config        core.repositoryformatversion=0
file:.git/config        submodule.active=.
#...省略（※localの設定一覧）
```

### 【書式2】Gitの設定を追加編集します。

```bash
$ git config [--system|--global|--local|-f <config_file> ] <name> <value>
```

### 【Optionの詳細】

|  option  |  説明  |
| ---- | ---- |
|  < name >  |  設定名を指定する。  |
|  < value >  |  設定値を指定する。設定値がspaceを含む場合は「"」で囲んで指定する。  |

```bash
# 設定を追加する例

# ユーザemailの設定が存在してない場合、下記のコマンドで、
# カレントユーザの設定にユーザのemailを追加する。
# 既に存在する場合、更新となります。
$ git config --global user.email hayashi.hirohumi@xxxx.com

# 追加完了後、--listオプションで確認する
$ git config --global --list

# 実行結果
#...省略
user.email=hayashi.hirohumi@xxxx.com
#...省略
```

### 【書式3】Gitの設定を削除します。

```bash
$ git config [--system|--global|--local|-f <config_file>] [--unset|--unset-all|--remove-section] <name>[<value>]
```

### 【Optionの詳細】

|  option  |  説明  |
| ---- | ---- |
|  --unset  |  設定値を1つだけ削除する際に使用する。<br>※設定名に対して複数の設定値がある場合は、value引数と組み合わせて指定する。  |
|  --unset-all  |  設定名に対して複数の設定値がある場合に、まとめて削除する。  |
|  --remove-section  |  セクションごと削除する。<br>例：userセクション<br>user.name=hayashi.hirohumi<br>user.email=hayashi.hirohumi@xxx.com  |

```bash
# 設定を削除する例

# カレントユーザの設定にユーザのemailを削除する。
$ git config --global --unset user.email

# カレントユーザの設定にuserセクションを削除する。
$ git config --global --remove-section user
```

### 【書式4】Gitの設定をエディターで編集します。

```bash
# インストール時、設定されているデフォルトエディターで設定ファイルを開く。
$ git config [--system|--global] [-f <config_file>] -e(--edit)
```

## 使い方

### 有効範囲

前述にもざっくり説明したが、Gitの設定には3つの有効範囲が存在します。
同じ設定名が複数の有効範囲に存在する場合は、下記の順で最後に設定されている値が使用されます。

1. --system
 - OS範囲内有効となる。言い換えると、OSのすべてのユーザに有効な設定である。
2. --global
 - 現在ログインしているユーザ固有の設定である。
3. --local
 - リポジトリ固有の設定である。リポジトリ内のディレクトリで--systemおよび--globalのいずれも指定しない場合に設定される。

なお、Gitの設定はローカルのみ有効であるので、リモートリポジトリには同期されることはない。


### 設定名
Git configコマンドは設定名と設定値を指定することが必要である。設定名は、セクションとキーで構成されている。
それぞれを「.」で結合した文字列が設定名となる。
下記の例で説明します。

```bash
# nameとemailはキーで、両方ともuserセクションに所属している。
$ git config user.name "hayashi.hirohumi"
$ git config user.email "hayashi.hirohumi@xxx.com"

# 上記の【書式3】によるとセクション毎に削除できる
$ git config --remove-section user
```

## 終わりに
今回 git config コマンドについての概要を説明しましたが、次回の「Gitの設定編（二）　git configでの高頻度設定」でよく使う設定を詳しく説明しようと思います。