１つのPCで複数のGithubアカウントを使う方法

# はじめに
わたしはプライベートで持っているPCの性能が低いので、個人的に開発を勉強するときも会社のPCを使っています。
ですが、githubのアカウントは会社用と個人用で使い分けたいよなーと思い、方法を調べました。
※以前公開した記事を誤って削除してしまったので、改めて公開しました。

# アカウントを使い分ける方法
全部で6ステップに分けて紹介します。

## 1. githubでアカウント・リポジトリを作る
兎にも角にもアカウントがなければ始まりませんので、githubで個人用のアカウントを作ります。
会社用のアカウントや、個人の第一アカウントがない方は、必要に応じてそちらも作ってください。

アカウントを作ったら、手動でリポジトリも作ってしまってください。
右上のアカウントメニュー　→ Your repositories → Newボタン　から作ることができます。

## 2. 秘密鍵・公開鍵を生成する
ご自身のpcのターミナルを開いて、コマンドを流します。

```bash
# .sshディレクトリに移動
% cd ~/.ssh
```
次に、鍵を生成します。

```bash
# 鍵を生成
% ssh-keygen -t rsa
```
ここでEnterを押すと、鍵の名前（ファイル名）を```id_rsa```にしていいかと聞かれ、何も書かずにEnterを押すと、その名前で鍵が作られます。
例えば、仕事などですでに一度鍵をそのマシンで作ったことがある場合、何も入力せずにいると鍵が上書きされる可能性があるので注意してください。
~~上書きしてしまうと、会社用アカウントのSSH接続もやり直さないといけなくなるのでめんどくさいです。~~

ですのでアカウントを使い分けたい場合、基本的には何か入力してあげるといいと思います。
ちなみに今回は、デフォルトの会社用の```id_rsa```という鍵ががすでに存在していると仮定して、```id_rsa_sub```という名前で作るとします。

ファイル名を入力してEnterを押すと、パスフレーズを聞かれますので、こだわりがある人は何か入力しましょう。ちなみに私は入力せずにそのままEnterしました。

次に、公開鍵をクリップボードにコピーします。

```bash
# 公開鍵をコピー
pbcopy < ~/.ssh/id_rsa_sub.pub
id_rsa_subの場所には、「鍵を生成」のところで入力した鍵の名前（ファイル名）を入力してください。
```

## 3. githubに公開鍵を登録
githubに舞い戻り、先ほど生成した鍵のうち、公開鍵を登録しに行きます。

まずは、先ほども開いた右上のアカウントメニューから、今度はSettingsをクリックしてください。
その後、左側のメニューの「SSH and GPG keys」を選択します。
![スクリーンショット 2022-08-03 11.29.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605286/a400172a-e714-0a94-e7cc-8591d0926aa9.png)


こんな画面が出てくるので、「Key」のところに、先ほどコピーした鍵をCtrl+Vで貼り付けて、そのまま「Add SSH key」をクリックしてください。
Titleは何も入力しなくて大丈夫です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605286/7070fd22-e38d-754c-453d-7df9663fd2ac.png)

これで鍵の登録は終わりです。

## 4. configファイルを編集
```~/.ssh```に移動して、viでconfigファイルを開きます。
configファイルをまだ作ったことがない方は、touchで作ってしまいましょう。

```bash
# ~/.sshに移動
cd ~/.ssh

# configファイルがあるか確認
ls -ll

# （configファイルがない方だけ）
touch config

# configファイルを開く
% vi config
```
さて、configファイルに書き込みます。
iキーを押してinsertモードにして、書き込んでくささい。

```bash
# 会社用
Host github.com（任意の名前）
  HostName github.com
　　　　IdentityFile ~/.ssh/rsa（会社で使っているアカウントの鍵の名前）
  User git

# 自分用
Host github.com.sub（任意の名前）
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_sub（さっき作った鍵の名前）
  User git
```
上の例で、Userのところは特に変更しなくてOKです。
Hostのところは、会社用は```github.com```、自分用は```github.com.sub```など、書き分けてください。
IdentityFileのところは、```~/.ssh/[鍵の名前]```と書き込みます。

書き終わったら、escキーを押して、```:wq```で保存してください。

次に、SSH接続の確認をします。

```bash
# 接続確認
ssh -T [configファイルに書き込んだHost名]
```
Host名の場所には、例えば上のconfigファイルの例であれば
```bash
ssh -T github.com
ssh -T github.com.sub
```
のように入力します。
```bash
Hi [githubのユーザ名]! You've successfully authenticated, but GitHub does not provide shell access.
```
と返ってきたら成功です。

## 5. 対象のディレクトリでアカウント設定
ディレクトリごとにアカウントを使い分けるための設定に移ります。
まずは、gitに突っ込みたいディレクトリまでcdコマンドで移動してください。

そのディレクトリにたどり着いたら、まずはgitの初期化を行います。
```bash
# gitの初期化
git init
```
次に、そのディレクトリで使いたいgithubアカウントを設定します。
```bash
# アカウントの設定
git config --local user.name "[githubアカウントのユーザ名]"
git config --local user.email "[githubアカウントのメールアドレス]"
```
ちなみに、```--local```の代わりに```--global```をつけると、全てのディレクトリに対して使いたいアカウントを設定することができます。
私は、```--global```に会社用アカウントを、自分用で使っているディレクトリは個別で--localを設定しています。

それでは、本当に設定できているか確認してみましょう。
```bash
# 確認
git config user.name
git config user.email
```
意図したユーザ名、メールアドレスが返ってきたら成功です。

## 6. 初プッシュ
最後です！！
プッシュします。

まずは下記コマンドを流します。
```bash
# remote接続
git remote add origin git@[Host名]:[githubのユーザ名]/[リポジトリ名]
```
Host名の場所には、configファイルで設定したHost名を入れてください。
今回の例でいくと、会社用なら```github.com```、自分用なら```github.com.sub```がそれぞれ入ります。
```bash
git remote add origin git@github.com:[githubのユーザ名]/[リポジトリ名]
git remote add origin git@github.com.sub:[githubのユーザ名]/[リポジトリ名]
```
ここまできたら、あとはaddしてcommitしてpushするだけです！
```bash
git branch -M main
git add .
git commit -m firstcommit
git push origin HEAD:main
```
お疲れ様でした！！！

# おまけシリーズ
ここからは、他にどんな方法があるか考えてみたシリーズです

## 1.ディレクトリごとに自動でアカウントを使い分ける
今回紹介した方法は、手動で泥くさく使い分けの設定をしていますが、~/.gitconfigファイルに設定を追加することで、ディレクトリごとに GitHub アカウントを自動的に切り替える方法があるようです。
興味のある方は、後述の参考URLをのぞいてみてください。

## 2.アカウントを使い分ける他の方法
こんな設定をしなくても、githubアカウントを使い分ける方法は他にもあります。

PC自体のアカウントを使い分ける
PCにログインできるアカウントを２つ使い分ける方法ですね。
メリット・・・一回設定すればそれ以降特に何もしなくていい
デメリット・・・初期設定が大変

そもそもPCを使い分ければいいじゃない
ごもっともです。
メリット・・・一回設定すればそれ以降特に何もしなくていい
デメリット・・・初期設定が大変、スペックによってはコストもバカにならない

# おわりに
これ本当に便利なので、先人に感謝です。

# 参考URL
[複数のGitHubアカウントを使い分けたい時の設定方法とTips](https://zenn.dev/taichifukumoto/articles/how-to-use-multiple-github-accounts)
[gitをpushする際にエラー発生(error: src refspec ブランチ名 does not match any)](https://qiita.com/kenkono/items/c488ec9559f6cca34313)