GitHub と AWS CodeCommit を併用したり,プロジェクトごとに別アカウントを使ったり,リポジトリごとに git config を変える場面もある.今までは個人用 GitHub を global 設定とし,別アカウントはリポジトリごとに git config --local
コマンドで設定をしていたけど,最近リポジトリが増えて,設定を忘れる場面もあり,direnv
のように自動設定をする方法を探していた.
includeIf
Git Documentation を読むと,「Includes (include
)」と「Conditional includes (includeIf
)」の説明があり,なんと includeIf
を使うと,設定ファイルを条件付きで読み込めるため,さっそく検証することにした.
検証環境
以下のように,ホームディレクトリ直下に github
ディレクトリと codecommit
ディレクトリを作成した.さらにサンプルリポジトリ g1
/ g2
/ c1
/ c2
を作って git init
をしておく.
~/github ├── g1 └── g2 ~/codecommit ├── c1 └── c2
~/.gitconfig
今まで通り,ホームディレクトリに ~/.gitconfig
を置き,GitHub 用に global 設定をしている.今回は user
と email
を抜粋した.さらに includeIf
と gitdir
を組み合わせて,~/codecommit/
直下にあるリポジトリの場合に ~/.gitconfig_codecommit
を読み込む設定を追加した.Git Documentation を読むと,gitdir
以外に onbranch
なども使える.
[user] name = kakakakakku email = y.yoshida22@gmail.com [includeIf "gitdir:~/codecommit/"] path = ~/.gitconfig_codecommit
~/.gitconfig_codecommit
そして,条件付きで読み込む設定を ~/.gitconfig_codecommit
に置く.今回は仮で bob
と bob@example.com
にした.
[user] name = bob email = bob@example.com
検証結果
global 設定を反映する github/g1
と github/g2
は今まで通りだった.
$ cd ~/github/g1 $ git config user.name kakakakakku $ git config user.email y.yoshida22@gmail.com $ cd ~/github/g2 $ git config user.name kakakakakku $ git config user.email y.yoshida22@gmail.com
そして codecommit/c1
と codecommit/c2
は,期待通りに bob
になり,条件付きで読み込めていることを確認できた.便利だ!
$ cd ~/codecommit/c1 $ git config user.name bob $ git config user.email bob@example.com $ cd ~/codecommit/c2 $ git config user.name bob $ git config user.email bob@example.com
まとめ
プロジェクトごとに git config を読み替える場合は includeIf
を使うと便利!特に git clone
した直後にすぐ使えるのは体験として大きく改善した.小規模なら git config --local
コマンドも引き続き併用していく.