この記事はGMOペパボエンジニア Advent Calendar 2021 11日目の記事です。
首の調子が悪くて整体に電話をかけたら「画面を見るな」と言われたので、書きかけの記事を慌てて引っ張り出してネタにします。皆様も良い姿勢で画面と向き合いましょう。
GMOペパボではGitHub Enterprise Server(以下GHES)を使用してコードを管理しています。GHESのアカウントはgithub.comのアカウントとは別になるので、 git configのUser設定を切り替える必要があります。この作業は何もしなければ、git cloneごとに必要な作業で忘れると、意図しないアカウントでコミットが詰まれpushされる可能性があります。
これはめんどくさいので勝手に切り替わるようにします。要件は以下のとおりです。
- それぞれのリポジトリのuser設定は別にしたい
- GHESのホスト名をdotfilesの管理下に含めない
前提
コード管理を行なっているGHES のホスト名を ghes.example.com
とします。
方法
ghqを使ってリポジトリを管理する
ghqを使うことでリポジトリのクローン先をホストごとに分けることができます。
Songmu/ghq-handbook に詳しい利用方法が記載されています。
ghq get
コマンドでリポジトリを取得することによって、 gitconfigの ghq.root
に設定されたディレクトリ以下にリポジトリがクローンされるようになります。
gitconfigを設定する
以下の設定を書きます。
~/.gitconfig
これだけdotfilesのコード管理に含めます。
# $ cat ~/.gitconfig [user] name = github_user email = github_user@example.com [include] path = ~/.config/git/local.gitconfig [ghq] root =~/src
~/.config/git/
以下
以下はコード管理下に置きません。
~/.config/git ├── ghes.example.com.gitconfig └── local.gitconfig
# $ cat ~/.config/git/local.gitconfig [IncludeIf "gitdir:~/src/ghes.example.com/"] path = ~/.config/git/ghes.example.com.gitconfig
# $ cat ~/.config/git/ghes.example.com.gitconfig [user] name = ghes_user email = ghes_user@example.com
IncludeIf
で特定のディレクトリの下でのみgitconfigを適用できるので、それを利用してuser設定を切り替えます。これにより、 ~/src/ghes.example.com/
の下のディレクトリで ~/.config/git/ghes.example.com.gitconfig
の設定を適用させることができます。 local.gitconfig
を挟んでいるのは、 IncludeIf
の設定でGHESのホスト名を含んだ設定を行う必要があるためです。気にしないのであれば、回りくどいことをせずにgitconfigに直接書くのが良いと思います。また、個人的にはgithub.comのアカウント情報がGHESにコミットされた方がダメージが低いので、globalのuser設定ではgithub.comのアカウント情報を設定し、GHESのリポジトリの上で設定を上書きするようにしています。
参考
- Git - git-config Documentation
- ghqでリポジトリ管理とpeco連携で快適git生活 - Qiita
- Gitでリポジトリ毎に異なるアカウントを使う | AABrain (ほとんどこの内容と被ってしまいました…)