Gitのグローバルな設定は、ホームディレクトリの.gitconfigファイルに記述されています。例えばGitを使いはじめる際には、コミットに記載されるユーザー名とメールアドレスを設定しますよね。具体的には以下のように。
[user] name = Hajime MIZUNO email = mizuno@example.com
こうした設定を、プロジェクトごとに使い分けたことってありますよね。よくあるのが、社内リポジトリと個人リポジトリ、さらにはOSSプロジェクトへのコントリビュートで、メールアドレスを変更したい……といったケースです。
これにはいくつか方法があります。まず簡単なのが、git config --local
を使い、そのリポジトリに固有の設定をする方法です。ですがこれには、リポジトリをクローンする度に設定しないといけないという問題があります。面倒ですね。
direnvを使うというのもありでしょう。例えばコミット時のauthorとして使われる名前は、環境変数GIT_AUTHOR_NAME
で、メールアドレスはGIT_AUTHOR_EMAIL
で設定できます。とはいえdirenvを使うということは、設定がGitの内側だけに閉じないということもあり、ちょっと見通しが悪くなるかもしれません。
実はGitの設定にはinclude
というセクションを記述できます。これは文字通り、別の設定ファイルを読み込むためのものです。そしてその派生版としてincludeIf
があります。名前の通り、いわゆる「条件つきインクルード」です。これを使うと、プロジェクトのパスに応じて、別の設定ファイルをインクルードできるのです。
例えば、.gitconfig_hoge
という名前で、以下のファイルを作成します。
[user] name = Hoge email = hoge@example.com
そして.gitconfigに、以下の条件つきインクルードを設定します。
[includeIf "gitdir:~/hoge/"] path = ~/.gitconfig_hoge
こうすることで、~/hoge
以下のディレクトリに作られたリポジトリでは、~/.gitconfig_hoge
が読み込まれ、ユーザー名とメールアドレスがオーバーライドされるというわけです。日常的に異なるアカウントを使い分けたい場合の小ネタでした。