GitHubとGitLabのどちらのアカウントを持っている場合、分けて管理したいことがあります。
今回の記事では、GitHubとGitLabのアカウントを別々に利用する際の具体的な手順をまとめました。
基本的には、以前の記事と同様の方法となっています。
ディレクトリ構成
以下のようなディレクトリ構成でGitHubとGitLabのアカウントを分けてリポジトリの管理を行います。
~/
├── .gitconfig
├── github/
├── .gitconfig
├── githubのリポジトリ1
├── githubのリポジトリ2
├── ...
└── githubのリポジトリN
└── gitlab/
├── .gitconfig
├── gitlabのリポジトリ1
├── gitlabのリポジトリ2
├── ...
└── gitlabのリポジトリN
sshの設定
まずsshキーを複数用意し、それぞれのGitHubのアカウントに設定します。以下のコマンドでGitHub用のsshキーを作成します。
$ mkdir ~/.ssh(必要であれば)
$ cd ~/.ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):github_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
1回目に聞かれた時点でキーの名前(ここではgit_private_rsa)を指定。
その後、2回エンターを押すとgithub_rsa_rsaとgithub_rsa_rsa.pubが生成されます。このキーをGitHubに使用します。
さらに、もう一度以下のコマンドでGitLab用のsshキーを作成します。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):gitlab_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
今回はgitlab_rsaという名前を指定します。このキーをGitLabに使用します。
これらの生成したsshキーをGitHubで公開の設定を行います。
その際に、鍵の中身をクリップボードにコピーするのは以下のコマンドで行います。
$ pbcopy < ~/.ssh/keyname.pub (Mac)
$ clip < ~/.ssh/keyname.pub (Windows)
GitHubのsshキーの登録
Githubにログインし、右上のアイコンからSettingsを選択します。
SSH and GPG keys > New SSH Keyから以下のようなSSHキーの登録画面に移ります。
Titileに任意の文字列を入力します。
Keyに先ほどコピーしたGithub用の(github_rsa.pub)値を貼り付けます。
GitLabのsshキーの登録
GitLabにログインし、右上のアイコンからEdit Profileを選択します。
SSH Keysを選択すると、以下の画面に遷移します。
Keyに先ほど取得したGitLab用の値(gitlab_rsa.pub)を貼り付けます。
Titleに任意の文字列を入力します。
Expires atはキーの期限を表しており、入力した場合はその期間まで有効となります。
未入力の場合、GitLab側で永続的にキーが有効となります。
GitHubとGitLabの使い分け
次に、sshの設定を行います。~/.ssh/configファイルを作成し、sshの設定を行います。
Host github # GitHubの設定
User git
HostName github.com
IdentityFile ~/.ssh/github_rsa
IdentitiesOnly yes
AddKeysToAgent yes
Host gitlab #GitLabの設定
User git
HostName gitlab.com
IdentityFile ~/.ssh/gitlab_rsa
IdentitiesOnly yes
AddKeysToAgent yes
- Host:任意のユニークな値
- HostName, User:github.comとgit
- IdentityFile:先ほど作成したsshキーの秘密鍵のファイルパス作成した秘密鍵のファイルパス
- IdentitiesOnly:複数のキーを保持している場合に、設定された鍵のみを使用するかどうかを設定。
- AddKeysToAgent:キーとパスフレーズをssh-agentへ自動的に追加するかどうかを設定。
`ここでは、アカウント操作の間違いを起こさないためにglobalの設定は行わないとします。
すでに設定している場合は、以下のコマンドでglobalの設定を削除します。
$ git config --global --unset user.name
$ git config --global --unset user.email
まず、~/.gitconfigを次のように設定します。
[includeIf "gitdir:~/github/"]
path = ~/github/.gitconfig
[includeIf "gitdir:~/gitlab/"]
path = ~/gitlab/.gitconfig
includeIfを利用することで、.gitconfigを条件付きで読み込むことができます。gitdirに読み込み先のディレクトリを指定します。このようにすることで、各ディレクトリで異なるconfigファイルを読み込むことができます。
そして、次のようにそれぞれのconfigファイルを作成します。まず、~/github/.gitconfigは以下です。
[user]
name = abc
email = abc@example.com
[url "git@github"]
insteadOf = "git@github.com"
~/gitlab/.gitconfigは以下です。
[user]
name = def
email = def@example.com
[url "git@gitlab"]
insteadOf = "git@gitlab.com"
insteadOfを利用すると、gitコマンド使用時に、insteadOfで指定した文字列が、urlで指定した文字列に置き換えられて実行される。ここでは、gitコマンド使用時にgit@github.comがgit@githubに置き換えられてから実行されます。
以上の設定を行うことで、GitHubとGitLabのアカウントを使い分けることができます。
確認
実際にそれぞれのアカウントに接続可能であることを確認するために、以下のコマンドを実行します。
$ ssh -T github
$ ssh -T gitlab
まとめ
今回は、GitHubとGitLabのアカウントを使い分ける方法を紹介しました。
コメント