構成

本節ではコマンド git config 等による構成に関する事項について記す。構成項目がひじょうに多いが、私にとって有用なものを優先して掲載していく。

概要

Git の個人的構成オプションは既定でファイル $HOME/.gitconfig に保存される。テキストエディターで直接テキストを編集してもよいし、コンソールから git config --global で設定を書き込んでもよい。

各コマンドが任意に構成項目を参照するという設計上、すべてのオプションを一覧にまとめたようなものは存在しない。ここでは設定不可欠な項目とプロによる推奨項目を記すことにする。

設定ファイル

環境変数 XDG_CONFIG_HOMEXDG Base Directory 利用ノート で記したように定義した上で、既定パスの設定ファイル各種を再配置することを推奨する:

$ mv ~/.gitconfig $XDG_CONFIG_HOME/git/gitconfig

このように整理しておくことで、他のアプリケーションのドットファイルと一括して $XDG_CONFIG_HOME ごと Git でバージョン管理することが可能になる。 .gitignore などの他の Git 設定ファイルについても同様に扱うのが自然だ。

Caution

設定ファイルの一部が機密情報であるはずなので、そういうものは 後述 のように別ファイルに追い出して、公開リポジトリーに出さない運用にしろ。

設定内容

以下、設定ファイルでの記法で個人的に有用な設定項目をセクションごとに列挙していく。

セクション alias

エイリアス に記す。

セクション branch

branch.autoSetupRebase = always

git branch, git switch, git checkout で新しくブランチができるときに、merge``ではなく ``rebasepull させる。

セクション browser

他の構成項目を設定する過程で付随的に browser.<tool>.cmdbrowser.<tool>.path を設定する必要が生じたとする。

Cygwin の場合はサブセクションを "default-browser" とし、cmd = cygstart とすれば Windows の既定のブラウザーを開かせるようにできる。なおかつ固有名詞をハードコードすることを避けられる。

[browser "default-browser"]
    cmd = cygstart

同様に、WSL の場合には cmd = wslview とする。

[browser "default-browser"]
    cmd = wslview

セクション color

コンソールにおける文字色のオンオフや、色自体を設定するための構成オプションが多数存在し、サブセクションでそれらを指定する。

color.branch.<slot>

ブランチの色をカスタマイズする場合は次のように設定する:

[color "branch"]
    current = yellow reverse
    local = yellow
    remote = green
color.diff.<slot>

差分テキストの色をカスタマイズする場合は次のように設定する:

[color "diff"]
    meta = yellow bold
    frag = magenta bold
    old = red bold
    new = green bold
color.status

git status の出力する各種テキストの色を次のようにして設定することができる:

[color "status"]
    added = yellow
    changed = green
    untracked = cyan
color.ui = auto

git diffgit grep など、オプション --color を実装しているコマンドのデフォルトの色使い設定を指示する。値としては auto で十分だと思われる。

セクション core

core.autocrlf = input

テキストファイルをコミットするときに、改行文字の変換をどうするのかを指示する。

値を input にセットして変換を行わせない。

core.excludesFile = ~/.gitignore

作業コピー内の .gitignore.git/info/exclude の記述に加えて、ここで設定したファイルもバージョン管理の対象外ファイルの一覧とする。

この値を設定するよりも、既定値である $XDG_CONFIG_HOME/git/ignore$HOME/.config/git/ignore に一覧を移行したほうがいいかもしれない。

core.editor

ログメッセージを編集するためのコマンドを設定する。

普通は汎用テキストエディターのパスをセットするのだが、この構成オプションを設ける代わりに、環境変数 GIT_EDITOR でそれをセットすることにした。

core.fileMode = true

Cygwin から WSL に作業環境を移行する際にこの設定を true に変えた。

セクション diff

diff.tool = vscode

コマンド git difftool を実行するときに使われる差分ツールを設定する。詳細はサブセクション、この場合は difftool "vscode" に記す。次節の記述を参照。右辺でセットする値は Git が規定する名前か、任意の名前を設定できる。ここでは任意の名前として vscode と書いた。

セクション difftool

difftool.<tool>.cmddifftool.<tool>.path を次のように設定する。ここでシェル変数 LOCALREMOTE にはそれぞれ差分の pre-image とpost-image となる一時ファイルがそれぞれ動的にセットされる。

ツールの特性に合わせて敢えてこれらのパラメーターを入れ替えて指定することもあり得る。

[difftool vscode]
    cmd = code --wait --diff $LOCAL $REMOTE
difftool.prompt = false

ツールの起動時にプロンプトを出すかどうかを設定する。要らないので false とする。

セクション help

help.browser = default-browser

ヘルプをウェブブラウザーで見るときのブラウザーを設定する。併せて browser.<tool>.cmd なり browser.<tool>.path を設定すること。

help.format = web

コンソールでヘルプを見るのはつらいので、HTML 版をブラウザーで見るための設定。逆に man のほうが慣れているならば、この項目を設定しない。

セクション merge

merge.ff = false

コマンド git merge 実行時に --no-ff が付く。

merge.tool = vscode

git mergetool を実行するときに使われるマージツールを設定する。

他の構成オプションの例と同様に merge.<tool>.cmd なり merge.<tool>.path を設定すること。次の節も参照。

merge.log

true を設定したい。

セクション mergetool

mergetool.<tool>.cmdmergetool.<tool>.path を次のように設定する。ここで BASEREMOTE などのシェル変数を、マージ処理に関連する一時ファイル名として指示するのに用いる。

[mergetool "vscode"]
    cmd = code --wait $MERGED
keepBackup = false

マージ処理後に、衝突マーカーの付いたファイルを残すかどうかを設定する。要らないので false とする。

prompt = false

ツールの起動時にプロンプトを出すかどうかを設定する。要らないので false とする。

セクション pull

pull.ff = only

コマンド git pull 実行時に --ff-only が付く。

セクション push

push.default = current

git push のように refspec を指定しないでプッシュするときに、実際に何をプッシュするのかを設定する。値を current とすれば、現在ブランチをリモートの同名ブランチにプッシュするようになる。

セクション user

GitHub にリポジトリーを設置するのであれば要設定。ただし、このセクションは $HOME/.gitconfig に直接記入するのではなく、別のファイルに記載して include する運用を取ること。

# in ~/.gitconfig:
[include]
    path = /path/to/gitconfig-user

# in /path/to/gitconfig-user:
[user]
    name = xxxx
    email = xxxx
user.name

私の名前をテキストで設定する。

user.email

私のメールアドレスを設定する。

user.signingKey

キーを設定する。設定値が git taggit commit でキーが必要な状況において、引数にキーを指示しないでコマンドを実行するときに参照される。

セクション web

web.browser = default-browser

ウェブブラウザーを利用するコマンドに対して、どのブラウザーを使わせるのかを設定する。これを設定する場合、セクション browser のサブセクション browser "default-browser" を設けて、そこで browser.<tool>.cmd なり browser.<tool>.path を設定することになる。

[web]
    browser = default-browser
[browser "default-browser"]
    cmd = wslview