.gitconfig で別ファイルから設定を include する

create
2021年07月06日
update
2021年07月06日

今更ながら include 節を設定すれば .gitconfig の一部設定を別ファイルで管理できることを知ったので、その備忘録。

🧪使い方サンプル

例を見たほうが早いと思うので。

Example 1. include を使った場合の例
.gitconfig
# This is the config file.
[core]
	quotepath = false
	commitGraph = true
	autocrlf = input
	...

[include]	(1)
    path = ~/.config/git/config.d/alias.conf	(2) (3)
	path = ~/.config/git/config.d/ghq.conf

[includeIf "gitdir:~/ghq/test/"]	(4)
    path = ~/.config/git/config.d/test_user.conf
1 別ファイルから設定を取り込みたいときは include で指定する。
2 path 変数に取り込むファイルのパス[1]を指定する。
3 path 変数は複数指定できる。よって取り込ませたいファイルの数だけ指定する。
4 ある条件下のみ取り込ませたい設定がある場合は、includeIf を用いる。
この例では、指定したパス以下にある git リポジトリにおいて下記のファイルを取り込ませている。
~/.config/git/config.d/alias.conf
# Git aliases
[alias]
	aliases = config --get-regexp alias
	remotes = remote -v
	stashes = stash list
    ...
~/.config/git/config.d/test_user.conf
# Test user
[user]
	name = tester
	email = tester@example.email.com
設定チェック
git config alias.aliases
config --get-regexp alias
git config user.name
Akiaki Susuki

cd ~/ghq/test/sample-project	(1)
git config user.name
tester
1 上記 includeIf の条件を満たすパスであるため、設定が更新されている。
Example 2. CLI から include.path を設定する場合
git config --global --add include.path "/path/to/include/file"	(1)

git config --get-regexp include.path	(2)
include.path ~/.config/git/config.d/alias.conf
include.path ~/.config/git/config.d/ghq.conf
include.path /path/to/include/file
1 path 変数は複数回記述されるため、--add オプションが必要になる。
2 git config コマンドから include.path の値一覧を確認するには --get-regexp オプションを利用して検索する。

🍉include および includeIf について

include

include 節を使うことで別ファイルから .gitconfig の設定を取り込むことができる。

path 変数に取り込ませたい設定ファイルのパスを指定する。
このとき相対パスも指定でき、include が記述されたファイルを起点とした相対パスとなる。
また、チルダ(~)によるパス指定もできる。

path 変数は複数回の設定ができるため、取り込ませるファイルの数だけ指定する。

includeIf

ファイルを取り込むときにある条件をつけたい場合は includeIf を利用する。

.gitconfig
[includeIf "<conditional>"]
	path = /path/to/file.inc
指定できる条件について
gitdir:<pattern>

.git ディレクトリのパスが指定した glob パターンと一致する場合に真となる。

通常はリポジトリのパスを指定したいはずなので、パターンの末尾を / または /** とすればいい[2]
この場合、指定したパターンのパス以下にあるリポジトリすべてが対象となる。

gitdir/i:<pattern>

大文字小文字を区別しない gitdir

onbranch:<pattern>

ブランチ名が glob パターンと一致する場合に真となる。


1. 絶対パス・相対パスの両方とも指定可能。相対パスにおいてはチルダ(~)が使用できる。
2. パターンの末尾が / であるとき、自動的に ** が挿入されて解釈されるため。