複数の Git アカウントを使い分ける設定

はじめに

ふと会社の人が質問しているのを見かけたので、割と需要はあるのかなと思い、僕がローカルでやってる設定をまとめてみた。

複数 Git アカウントを使うケース

僕が所属する会社では GitHub Enterprise Server を導入しており、Enterprise のアカウントと個人のプライベートアカウントとの 2 つの GitHub アカウントを使い分けることになる。

他にも GitLab やクラウド上の Git サーバである AWS CodeCommit なんかを含めると複数の Git アカウントを使い分けるというケースは割とあると思う。

本記事はそういった場合に、どういう設定をしておけばストレスなく使い分けができるかといったポイントをまとめておく。

SSH の設定

基本的には SSH で接続するため、事前にそれぞれのアカウントで使用する公開鍵・秘密鍵を生成しておく。この記事では、鍵の作成はできている前提で省略する。1

SSH の設定は、~/.ssh/config に定義するので、以下に Enterprise 用と個人のプライベート用の設定を示す。 前者が Enterprise アカウント用の設定で、後者がプライベートアカウント用の設定になる。

~/.ssh/config
Host github.company.com
  HostName github.company.com
  IdentityFile ~/.ssh/id_github_rsa
  User git

Host github.com
  HostName github.com
  IdentityFile ~/.ssh/id_github_private_rsa
  User git

HostName github.company.com の部分についてはご自身の会社の GitHub Enterprise Server のドメインを記載すれば良い。

.gitconfig のユーザの設定

Git では commit する際にユーザの情報(ユーザ名、メールアドレス)が必要になる。

ユーザの情報については、グローバルの設定として基本的に ~/.gitconfig に設定していると思う。

~/.gitconfig
[user]
    name = "taro yamada"
    email = "[email protected]"

しかし、上記のように会社のアカウントのユーザ情報のみを設定している場合、リポジトリを作成もしくはクローンした際に、都度手動でユーザ設定をする必要がある。

$ git config --local user.name = "private"
$ git config --local user.email = "[email protected]"

これを忘れると、プライベートのアカウントで commit したいのに誤って会社アカウントで commit してしまうというミスが起こることもある。

~/.gitconfigincludeIf を使うと、この問題を解決を解決できる。

~/.gitconfig
[user]
    name = "taro yamada"
    email = "[email protected]"

[includeIf "gitdir:~/private/**"]
    path = ~/.gitconfig.private
~/.gitconfig.private
[user]
    name = "private"
    email = "[email protected]"

このようにすることで ~/private 配下の Git リポジトリはプライベートのアカウントで、それ以外は会社のアカウントでと切り替えて commit できる。

ただ、これも完全なソリューションではなく、配置するディレクトリを間違うと意味がないのでご自身でルールを決めて運用する必要がある。

まとめ

複数の Git アカウントをストレスフリーに使い分ける方法について紹介した。

僕の ~/.gitconfigdotfiles に公開しているので、良かったら是非参考にしてほしい!

参考

Git - 最初のGitの構成
Git - 最初のGitの構成 favicon git-scm.com
includeIf を使って git config をプロジェクトごとに読み替える - kakakakakku blog
GitHub と AWS CodeCommit を併用したり,プロジェクトごとに別アカウントを使ったり,リポジトリごとに git config を変える場面もある.今までは個人用 GitHub を global 設定とし,別アカウントはリポジトリごとに git config --local コマンドで設定をしていたけど,最近リポジトリが増えて,設定を忘れる場面もあり,direnv のように自動設定をする方法を探していた. includeIf Git Documentation を読むと,「Includes (include)」と「Conditional includes (includeIf)…
includeIf を使って git config をプロジェクトごとに読み替える - kakakakakku blog favicon kakakakakku.hatenablog.com
includeIf を使って git config をプロジェクトごとに読み替える - kakakakakku blog
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita
GitHubにssh接続するために鍵の登録が必要になります。その手順をまとめてみます。はじめての人は手順通りに進めれば接続出来ます。久しぶりにやってうまくいかないという人の解決の糸口になるよう…
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita favicon qiita.com
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita

Footnotes

  1. 公開鍵・秘密鍵の作成については、こちらの記事が大変参考になると思う。GitHub で ssh 接続する手順公開鍵・秘密鍵の生成から - Qiita