2026年6月9日火曜日

ディレクトリごとに Git config/credential を切り替える方法

Git の設定をディレクトリごとに切り替えたいことってありますよね?
user の切り替えは git config の IncludeIf を使えば簡単にできます。

[includeIf "gitdir:~/mydir/"]
    path = ~/.gitconfig_me
.gitconfig_me の中身はこんな感じです

[user]
	name = srz_zumix
	email = メアド

ただ、これだけだと認証情報が切り替わってくれないです。
既知の事例だと以下のような例が見つかります。
  • IncludeIf で credential helper を切り替えてそれぞれヘルパーを呼び出す
  • ~/.ssh/config にホストエイリアスを作成して使い分ける
  • direnv などで環境変数を切り替えて対応する
使いやすい方法で良いと思いますが、今回は user 設定に追従して欲しいと思ったので専用の gh extension を作成しました。
https://github.com/srz-zumix/gh-git-user-credential
仕組みとしては git config user.name を取得して、その名前指定で gh auth token を取得し、GH_TOKEN や GH_ENTERPRISE_TOKEN に export して gh auth git-credential を呼び出しています。
credential helper をこの拡張に変更すれば user に応じて credential が切り替わるようになります。セットアップ方法は README を確認してください。

ちなみに、現在は Git v2.36.0 で hasconfig:remote.*.url のように hasconfig で git config の値に応じて設定を切り替えできるようになりました。

[includeIf "hasconfig:remote.*.url:https://github.com/srz-zumix/**"]
  path = ~/.gitconfig_me
この方法を使えばディレクトリごとに切り替えではなく、GitHub の Organization (組織)ごとに切り替えもできますね。

以上です。では