喫茶's CAFE

心にうつりゆくよしなしコードをそこはかとなく

Visual Studio CodeのgitでincludeIfがうまくいかなかった話

今まではMacで開発することが多かったのですが、良いマシンを買ったので開発環境をWindowsに作りました。 githubだけでなくgitbucketを使うこともあるので、それぞれのプロジェクトでgitの設定を変えて使っています。 ただ各レポジトリの.gitconfigを編集するのはとても面倒くさい。

そこでMacのときはグローバルの.gitconfigをgithub用の設定に、gitbucket用の設定は対象のディレクトリ以下のレポジトリに対する設定をincludeIfで読み込むようにしていました。 以下のファイルのような設定をすると~/work以下のレポジトリには.gitconfig-work の設定が適用されます。 Visual Studio Code上でgitを操作していても期待したとおりの動きをしてくれていました。

~/.gitconfig

[user] 
    user = user_example
    email = hoge@example.jp

 [includeIf "gitdir:~/work/"] 
    path = ~/.gitconfig-work 

~/.gitconfig-work

[user] 
    user = user_work 
    email = hoge@work.com 

ところがwindowsで同じことをしたところ、なぜかVisual Studio Code上でgitを操作したときだけ.gitconfig-workの設定を読んでくれませんでした。 さすがWindowsすんなりと通してはくれません。ただ割とすぐに解決方法は見つかりました。

Git integration does not correctly support `includeIf` directive · Issue #40354 · microsoft/vscode · GitHub

さきほどの.gitconfigでincludeIfの部分を以下の用に変えるだけです。 Visual Studio Codeでgitを操作しているときにパスの大文字小文字の区別がなくなり、対象のディレクトリパスをちゃんと読んでくれなかったみたいです。 gitdir/iにするとその後ろの対象ディレクトリを大文字、小文字の区別なく認識してくれるとのこと。

~/.gitconfig

[user] 
    user = user_example 
    email = hoge@example.jp 

[includeIf "gitdir/i:~/work/"] 
    path = ~/.gitconfig-work