🙌

ghq配下のリポジトリによってgitの設定ファイルを切り替えるときの注意点

2022/08/08に公開

要約

gitdir.を含む場合はエスケープしましょう

環境

  • fish 3.5.0
  • git 2.36.1

Gitの設定を切り替えたい

自分用のリポジトリで作業するときは個人用メールアドレスで,仕事用のリポジトリで作業するときは会社のメールアドレスでコミットログを残したいということはよくある動機だとおもいます.Gitでは設定にincludeIfを使うことでこれを実現することができます.
https://git-scm.com/docs/git-config#_includes

~/.config/git/config
[user]
    name = myusername
    email = my-address@example.personal.com
[includeIf "gitdir:~/my/org/"]
    path = ~/.config/git/config_work
~/.config/git/config_work
[user]
    email = my-address@example.work.com

この設定をすると~/my/org以下のリポジトリではメールアドレスがmy-address@example.work.comになり,それ以外ではmy-address@example.personal.comになります.

ghqと併せて使いたい

私はリポジトリ管理に ghq を利用しています.ghqではどこからリポジトリを取得してきたか明示的にわかるようクローンされます.

(READMEのDIRECTRY STRUCTUREから引用)
~/ghq
|-- code.google.com/
|   `-- p/
|       `-- vim/
`-- github.com/
    |-- google/
    |   `-- go-github/
    |-- motemen/
    |   `-- ghq/
    `-- urfave/
        `-- cli/

なので会社の所有するリポジトリでincludeIfを設定したい場合,例えばmyorg/awesome-prjで会社用の設定に切り替えたい場合,次のように書くかもしれません.

...
[includeIf "gitdir:~/ghq/github.com/myorg/"]
    path = ~/.config/git/config_work
...

しかしこれではうまく切り替わってくれません.

原因と対処

詳しくは調べられていませんが,github.com.が原因で切り替えられていないようでした.なので.をエスケープします.

...
[includeIf "gitdir:~/ghq/github\.com/myorg/"]
    path = ~/.config/git/config_work
...

これで正しく切り替わるようになります.

Discussion