はじめに
ふだん 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 | [メールアドレス] | 補足: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 を公開して、少しでも貢献したいですね。
** 参考(感謝)**
