🙌
ghq配下のリポジトリによってgitの設定ファイルを切り替えるときの注意点
要約
gitdir
に.
を含む場合はエスケープしましょう
環境
- fish 3.5.0
- git 2.36.1
Gitの設定を切り替えたい
自分用のリポジトリで作業するときは個人用メールアドレスで,仕事用のリポジトリで作業するときは会社のメールアドレスでコミットログを残したいということはよくある動機だとおもいます.Gitでは設定にincludeIf
を使うことでこれを実現することができます.
~/.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