https+アクセストークンを使ってGitHubのアカウントを使い分ける

  • 51
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

GitHubを使っていると、一つのマシンで複数のアカウントを使い分けたい、というケースがあります。

ネット上ではすでにいろんな方法が紹介されていることからも、実際にそういうケースは少なくないのでしょう。

個人的に、HTTPSとアクセストークンを使った方法が一番よいのでは?という結論に落ち着こうとしており、そのための手順があまりなかったので、まとめました。

ちなみに、リポジトリへのアクセスにはSSHとHTTPSがありますが、GitHubとしてはHTTPSの方が推奨されているみたいですね (Which remote URL should I use?)

想定するユースケース

  • PC1
    • GitHubアカウントAをメインで使っている。
  • PC2
    • GitHubアカウントBをメインで使っている。

この時、例外的に、PC2からGitHubアカウントAのリポジトリに(アカウントAとして)コミットしたい、というケースです。

例えば、PC1を個人PC、PC2を会社PCとして、会社PCから個人のリポジトリに、個人アカウントでコミットしたい、というのがイメージしやすいでしょうか。

なお、「メインで使っている」というのは、そのPCで作成した鍵ペアがGitHub上のアカウントに登録されており、 user.nameuser.emailgit config --global で登録されている状態だと思ってください。

やり方

簡単にまとめると、GitHubでアクセストークンを作成して、クローン時のURLの認証情報にアクセストークンを渡すだけです。

GitHub) アクセストークンの作成

  1. GitHubにアカウントAでログインし、右上のSettingをクリックして、Personal settingメニューから「Personal access tokens」を選びます。直URLは以下。
    https://github.com/settings/tokens
  2. 「Generate new token」ボタンをクリック。
  3. トークン作成画面で必要な項目を入力し、画面下にある「Generate token」ボタンをクリックします。
    • Token description: トークンの説明です。例えば、PC2から利用するトークンということで PC2 とします。
    • Select tokens: このトークンで許可するスコープです。今回は、「repo」(Full control of private repositories)をチェックしておきます。各スコープの詳細はこちらを参照してください。
  4. トークンが作成されるとトークンが表示されるので、クリップボードにコピーしておきます。セキュリティ上の観点から、トークンが確認できるのは作成直後だけであることに注意してください(再作成は可能です)

PC2) リポジトリをclone

アカウント名とアクセストークンを認証情報としてリポジトリをクローンします。

pc2$ git clone https://{アカウントA}:{アクセストークン}@github.com/{アカウントA}/{リポジトリ名}

Gitのユーザ名とメールアドレスをローカル設定しておきます。

pc2$ cd {クローンしたリポジトリ}
pc2$ git config --local user.name {アカウントA}
pc2$ git config --local user.email {アカウントAのメールアドレス}

あとは、通常通り push することができます。

この方式のメリット

  • 設定が楽
    • トークンの作成は1分もかからずにできますし、それ以外は git clonegit config だけです。
  • 運用も楽
    • 1台のマシンの中にアカウントごとの鍵ペアを分けて管理したりする必要がありません。
    • pushするたびにパスワード入力を求められることもありません。
    • 何かの理由でトークンを再発行した場合は、 .git/config を書き換えてあげればよいはずです(未確認)。
  • 権限管理
    • トークン作成時のスコープとして、利用可能なオペレーションを選択できるので、余計な操作を許可しないことで、トラブルリスクを抑えることができます。
    • 一方で、プライベートリポジトリに対してのアクセス権を与えることもできます。

参考

http://stackoverflow.com/questions/18935539/authenticate-with-github-using-token