Git .gitconfigの設定を忘れない様に確認しましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/ba240d48-f310-d524-45e0-4417ec55e135.png)

# はじめに

ふだん Git を利用してますが、本当に最低限しか `.gitconfig` に設定してません。
先日ペアプロして頂いた方は、物凄く `.gitconfig` でカスタマイズされていたので、いろいろと教えて頂きました。
「こんなにも設定があったのか」と知らない設定が多かったので、メモとして投稿します。

# そもそも、`.gitconfig` って何者？

`.gitconfig` は、gitの設定を書くファイルです。いろいろな項目を設定できます。
特に馴染みがあるのは、`user.name` と `user.email` でしょう。
みんな初めに `> git config --global user.name "{ユーザー名}"` とコマンドラインから登録したと思います。

## `.gitconfig` は、3レベルで設定が可能

上記で記載しているコマンド内に `--global` があります。global は真ん中のレベルで、`.gitconfig` には下記の3レベルでの設定が可能です。

|レベル |範囲 |Win設定ファイルパス |ケース |
| --- | --- | --- | --- |
|system |システム全体 | [gitインストール先]¥mingw64¥etc¥gitconfig |あまり使わない |
|global |ユーザ全体 | C:¥Users¥[ユーザー名]¥.gitconfig |よく設定する |
|local |対象リポジトリ |[リポジトリのルートディレクトリ]¥.git¥config |プロジェクト別のルールとか | 

# 私の今の設定

|グループ |項目 |設定値 |説明 |
| --- | --- | --- | --- |
|credential |provider |generic |多段階認証 |
|core |autocrlf |false |コミット・チェックアウト時に改行コードの変換を行う |
|core |quotepath |false |git status で変更した日本語ファイル名の文字化けを許容 |
|core |ignorecase |false |ファイルの大文字・小文字を区別しない |
|core |safecrlf |true |改行コードが混在している場合は変換しない |
|user |email |[メールアドレス] |補足：Github とそろえる |
|user |name |[名前] |補足：Github とそろえる |

# いろいろな設定

## `include` グループ

外部からの読み込み

### path

- include ファイルのパスを記載
- `path = ~/.gitconfig.local` などとして、境依存する部分や他人に見られるとまずい内容をあえてincludeでローカル参照し.gitconfigから除外（隠蔽）する

## `color` グループ

色設定

### ui

- Git でのターミナル出力への色付け

### diff

- git diff、git log、git show の出力への色付け

### status

- Git ステータスの出力への色付け

### branch

- Git ブランチ コマンドの出力色を構成

### interactive

- インタラクティブ プロンプトと表示に色を適用

## pager

git log などのコマンドを実行したとき、デフォルトでは less がページャーになっている。その設定

### log 

- pager.log の色付け

### show 

- pager.show の色付け

### diff 

- pager.diff の色付け

## receive

Git サーバー側受け取り設定

### denyCurrentBranch

- bare リポジトリの Push の受け付け方

### denyNonFastForwards 

- すでにプッシュしたコミットをリベースしてもう一度プッシュした場合、あるいはリモートブランチが現在指しているコミットを含まないコミットをプッシュしようとした場合は、プッシュが拒否されます。このような強制更新機能を無効にする

### denyDeletes 

- denyNonFastForwards の制限を回避する方法として、いったんブランチを削除してから新しいコミットを参照するブランチをプッシュしなおすことができます。 これを無効にするには、 receive.denyDeletes を true に設定します

## alias

Git コマンドへの別名

### 例

- st = status
    - `> git st` = `git status`

## push

`git push` の設定

### default

- push 先のリモートブランチ初期値

### useForceIfIncludes 

- `--force-if-includes` を指定したのと同じ
- `--force-with-lease` では push できてしまっていた `remotes/origin/main` と `origin/main` が揃っている場合でも、reflog に `remotes/origin/main` が含まれていること、をチェックして撥ねてくれます

## difftool

利用したい差分ツールを設定

## mergetool 

利用したいマージツールを設定

## core

git 主設定項目

### editor

- git で利用するエディター

### excludesfile

- git 除外ファイルを外部ファイルで定義

### precomposeUnicode

- Unicodeの結合。Mac PC / Win PC での混合開発

### quotepath = false

- git status で変更した日本語ファイル名の文字化け

### autocrlf = false

- コミット・チェックアウト時に改行コードの変換

## merge

`git merge` の設定

### ff

- 意図的にfast-forwardを行わないコミットをする

### tool

- 利用したいマージツールを設定

## mergetool

マージツールを利用した際の動きを設定

### keepBackup 

- .origをつけたバックアップファイルを生成有無

## credential

多段階認証の設定

### helper

- `git pull` や `git push` でのパスワードをキャッシュ

## filter

`git add` や `git checkout` での任意のフィルター

### clean

- `git add`  のフィルター

### smudge

- `git checkou` のフィルター

### process

- Git Large File Storage (LFS)のフィルタープロセスを設定

### required

- LFSフィルターを必須

## fetch

`git fetch` の設定

### prune

- リモートの削除済みブランチの情報を取得

## pull

`git pull` の設定

### rebase

- `git pull` の動作を設定。rebase / marge

### ff

- fast-forward only

## init

リポジトリ初期化に関する設定

### defaultBranch

- 新規リポジトリ作成時のデフォルトブランチ名

## commit

`git commit` の設定

### template

- コミットメッセージのテンプレートへのパス

# おわりに

改めて設定項目の多さを再確認。少しずつ自分の `.gitconfig` に設定を追加して、使いやすい git 環境を整えていきたいと思います。
いつか dotfiles を公開して、少しでも貢献したいですね。

---

** 参考（感謝）**
- [Git のカスタマイズ - Git の設定](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%81%AE%E8%A8%AD%E5%AE%9A)
- [[Git]configファイルの場所(macOS / Windows)](https://www.curict.com/item/fe/fe45741.html)
- [git push -f が更に安全になる --force-if-includes](https://onk.hatenablog.jp/entry/2022/12/18/000000)
- [まだ .gitconfig に core.excludesfile を設定しているの](https://qiita.com/ueokande/items/e0409219e7c68e4277b9)
- [Gitで、事前にUnicodeの結合を行う](https://faithandbrave.hateblo.jp/entry/2016/02/08/144948)
- [git mergeのコンフリクト解消にvimdiffを使う](https://scior.hatenablog.com/entry/2021/05/05/193113)
- [git を https 経由で使うときのパスワードを保存する](https://qiita.com/usamik26/items/c655abcaeee02ea59695)
- [Git LFS をちょっと詳しく](https://qiita.com/ikmski/items/5cc8b8832336b8d85429)
- [.gitconfigの設定](https://zenn.dev/tmb/articles/b979bd0e06a88d)
- [git pullしたらWarning出たからちゃんと読む](https://zenn.dev/azunasu/articles/92859cb37cbd96)