とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

Gitでディレクトリごとに設定を使い分ける

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が読み込まれ、ユーザー名とメールアドレスがオーバーライドされるというわけです。日常的に異なるアカウントを使い分けたい場合の小ネタでした。