Gitの複数アカウントを良い感じに管理する
この記事はQiitaから移行してきました。
概要
仕事用と個人開発用とか、仕事で社内とクライアント用を分けてるとか、色々な理由でgitのアカウントやsshキーやらの設定を使い分けたいことがあると思います。
僕は個人用仕事用合わせて4つを使い分けないといけないので、いい感じに管理できるように設定しています。
ディレクトリ毎に使用する.gitconfig
を切り替える
gitのアカウントですが、remoteのGitHub等のアカウントと連動して.gitconfigに設定されているuser.name
やらuser.email
を変えたいですよね。
localの.git/config
に設定することもできますが、複数リポジトリある場合に毎度設定するのも面倒です。
そこで、globalの設定をディレクトリ毎に自動で切り替えることで解決します。
global設定の~/.gitconfig
の中でincludeIfを使う事で条件付きで別のconfigファイルを読み込むことができるので、それで実現します。
まず各アカウント用のconfigファイルを作成します。
場所はどこでも良いですが、僕はhomeディレクトリ直下にgitconfigs
というディレクトリを作ってそこに全部入れています。
[user]
name = Shin-Taro_github
email = Shin-Taro_github@gmail.com
[user]
name = Shin-Taro_gitlab
email = Shin-Taro_gitlab@gmail.com
そしてincluedIf
を使ってこいつらを~/.gitconfig
から参照します。
ディレクトリの条件はgitdir
で指定します。
[user]
name = Shin-Taro
email = Shin-Taro@gmail.com
[includeIf "gitdir:~/projects/github/"]
path = ~/gitconfigs/.gitconfig_github
[includeIf "gitdir:~/projects/gitlab/"]
path = ~/gitconfigs/.gitconfig_gitlab
これで~/projects/github/
配下のリポジトリでは~/gitconfigs/.gitconfig_github
を
~/projects/gitlab/
配下では~/gitconfigs/.gitconfig_gitlab
を
それ以外の場所では元々の~/.gitconfig
を自動的に適用してくれます。
快適!!!
複数のsshキーの設定
さて、アカウント管理は良い感じになりましたがremoteに接続する際のsshキーも良い感じに管理したいです。
全部同じキーを使う事も出来ますが、当然セキュリティ上よくないですし、メールアドレスで紐づけていたりもするので使い分けたいですね。
ssh接続する際の基本形
まずssh接続の基本的なコマンドは以下のようになると思います。
オプションでポートや公開認証を指定したりできますが、今回は割愛します。(というかあんまり知りません)
# 一番シンプル
ssh ホスト名
# ユーザー名を指定する場合はこう
ssh ユーザー名@ホスト名
で、GitHubからsshでcloneするときとかはこんな感じになります。
git clone git@github.com:ユーザー名/リポジトリ名.git
ユーザーはgit
でホストはgithub.com
ですね。
この時デフォルトでは~/.ssh/
にある鍵を見に行くようです。
複数キーの設定
さて、マシン上にある秘密鍵とホスト名やユーザー名を紐づけるような形で設定しておけばこんな感じに書けます。
git clone 任意の名前:ユーザー名/リポジトリ名.git
設定は~/.ssh/config
に書きます。
Host github
Hostname github.com
User git
IdentityFile ~/.ssh/github
Host gitlab
Hostname gitlab.com
User git
IdentityFile ~/.ssh/gitlab
色々設定できますが、とりあえず4つ書いておけばOKです。
Host
(接続する際に使う任意の名前)Hostname
(接続先のホスト名)User
(接続するユーザー名)IdentityFile
(使う鍵のファイルパス)
Hostname
はドメイン名またはIPアドレスです。
HostName
は何も指定しない場合Host
と同じ値が設定されます。
なので、接続する際の名前とホスト名が同じで良いなら以下のように書けます。
Host github.com
User git
IdentityFile ~/.ssh/github
User
は任意の名前にもできますが、サービスによっては決まっていることもあります。
例えばGitHubはgit
じゃないとだめですし、Bitbucketはアカウントのユーザ名になります。
IdentityFile
で鍵の場所を指定するので~/.ssh/github/work
と~/.ssh/github/private
のように子ディレクトリを作って管理することもできます。
まとめ
~/.gitcinfg
でincludeIf
してディレクトリ毎にアカウントなどの設定を切り替える。~/.ssh/config
に設定を書いておいてsshキーを使い分ける。