MacでSourceTreeを使ってGithubに接続する

この記事は、初めてSourceTreeを使ってGithubに接続するかた向けの内容です。

主に自分の備忘録のために書いています。
間違った点などありましたら、ご指摘いただけますと嬉しいです。

なお、Git自体の仕組みについては割愛します。
ご参考までに、私は「[Gitが、おもしろいほどわかる基本の使い方33](https://amzn.to/3ALmDia)」という本を読んでGitの仕組みを勉強しました。

## 環境と条件
- macOS Big Sur
- 事前にGithubのアカウントを登録してください。
- 事前にSourceTreeをダウンロードしてください。

## 大まかな手順
1. github上に、リモートリポジトリを作る。  
2. SourceTreeにGithubのアカウントを追加する（HTTPS）  
3. SSHでGithubに接続する  

以下へ、詳細を記載します。

## 1.github上に、リモートリポジトリを作る。
ここでは、後の作業でリポジトリが表示されているかどうか確認するために、テストでリポジトリを作ります。

Githubにログインして、「New repository」から、リポジトリを新規作成します。
![001_github_remote_ 001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/02da1a98-2679-7d01-a6fb-9ea795c53414.png)

「Repository name」に任意の名前を入力します。
「Public」は公開リポジトリ、「Private」は非公開リポジトリです。任意で選んでください。
![002_github_remote_ 002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/bc931b5a-24e2-febb-a504-a861dfcaf93a.png)

最後に、「Create repository」をクリックで、リポジトリの作成は完了です。

## 2.SourceTreeにGithubのアカウントを追加する（HTTPS)
SourceTreeの「環境設定」から「アカウント」を開きます。
![003_github_https_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/7d38eacc-f608-067f-8891-a47da809feed.png)

「追加」をクリックして、以下のように選択・入力し、「保存」をクリックします。

- ホスト：Github
- 認証タイプ：お好みで（BasicはGithubのIDとPWで認証します。OAuthはブラウザでGithubのページを開いて認証します。）
- プロトコル：HTTPS
![004_github_https_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/5bc029af-32dc-c292-2cc6-00c8d730fddc.png)

すると、SourceTreeの「リモート」画面に、Githubで作ったリモートリポジトリが表示されます。
使いたいリモートリポジトリの右側にある「クローン」をクリックして、保存先（任意）と名前を入力して「クローン」をクリックすれば、ローカルのパソコンにリモートリポジトリをクローンできます！
![005_github_https_003.png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/01a89b12-92c7-b85f-8b12-9de59764fe66.png)
![006_github_https_004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/c5027123-72ed-da96-c8be-e8cf6f481b5d.png)


これでバージョン管理ができるようになります！


## 3.SSHでGithubに接続する。
ここまでで、SourceTreeを使ってGithubに接続して、バージョン管理を行えるようになりました。
しかし、大切なデータですから、よりセキュリティを高めて使いたいですよね。
そこで、SSHでGithubに接続する方法を記載します。

SSHでGithubに接続するには、以下作業が必要となります。

1. 秘密鍵と公開鍵を作る。
2. 公開鍵をGithubに登録する。

では、ご紹介します。

### 秘密鍵と公開鍵を作る。
今回は、SourceTreeを使って秘密鍵と公開鍵を作ります。

#### SourceTreeに登録しているGithubのアカウントのプロトコルをSSHへ変更する。
SourceTreeの「環境設定」から「アカウント」を開き、先程追加したアカウントを選択して「編集」をクリックし、「プロトコル」を「SSH」へ変更します。

すると、「SSHキー」の項目が表示されますので、「キーを生成」をクリックしてください。
![007_github_ssh_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/0a3d59a8-0488-5a12-6b5a-5570cbb837ab.png)

次の画面で、SSHキーを作成します。
パスフレーズを入力して「作成」をクリックします。
（パスフレーズは、忘れないように管理してください。）
![008_github_ssh_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/db475788-962c-b884-a68c-9d4e2d1ea17a.png)

これで、SSHキー（秘密鍵と公開鍵）を作成できました。
先程の画面に戻り、SSHキーの下にある「クリップボードにコピー」がクリックできるようになっていますので、ここをクリックして、公開鍵の内容をコピーしてください。
![009_github_ssh_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/d7206d4a-99b6-684d-992a-ff3ad3134c1a.png)

最後に、「保存」です。

### Githubに公開鍵を登録する。
続いて、Githubに移動します。
右側の自身のアイコンから「Settings」をクリックします。
![010_github_ssh_004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/9bb2e5d6-5d04-0894-1127-962abfbc9338.png)

左側のメニューに、「SSH and GPG keys」がありますので、こちらを開き、「SSH keys」の「New SSH key」をクリックします。
![011_github_ssh_005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/fdc8b8e4-b707-e2a3-920b-b1cb6514e157.png)

以下画面のkeyのところに、先程SourceTreeでコピーした公開鍵の内容をペーストしてください。（「Title」は、自身が管理しやすい名前を入力してください。）
![012_github_ssh_006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206717/35cfd390-1d5c-7528-31f0-0094f257afa5.png)

最後に、「Add SSH kays」をクリックしてください。

以上の手順で、SSHでGithubに接続できるようになりました！
**問題などがなければ、ここで「MacでSourceTreeを使ってGithubに接続」が完了となります！**


## Githubで「Private（非公開）」にしているリポジトリが表示されない場合。
Githubで、Private（非公開）にしている場合かつ、二段階認証にしている場合、SourceTreeのリモートリポジトリ一覧にPrivate（非公開）リポジトリが表示されないことがあります。その場合は、

1. Githubにてトークンを用意
2. SourceTreeの「アカウント」の「認証タイプ」を「Basic」へ変更
3. パスワードへ（1.）で用意したトークンを入力（発行したトークンは、何度か使うので、メモしておくことをおすすめします。）

すると表示されるそうです。（SSH接続も必須の模様）

以下記事を参考に、解決いたしました！ありがとうございます！
[https://qiita.com/akidon0000/items/cd482d4d7346f0c5b288](https://qiita.com/akidon0000/items/cd482d4d7346f0c5b288)


## repository not found!のエラーになってクローンできない場合（SSHでクローンできない）
ここ、だいぶハマりました…。

SSHでクローンしてみようとしたのですが、「repository not found!」と表示され、クローンできず…。
しかし、httpsではクローンできていました。

自力では解決できなかったので、I氏に助けていただきました！ありがとうございます！！
以下へ、I氏に教えていただいた内容を記載します。

### SSHの接続ができているか確認する
ここから、自身のマシンのターミナルを操作します。

まず、SSHの接続ができているか確認するため、ターミナルを開いて、以下コマンドを打ちます。

```
$ ssh -T git@github.com
```

もし、以下メッセージが表示されたら、「yes」で実行してください。

```
The authenticity of host 'github.com (【IPアドレス】)' can't be established.
RSA key fingerprint is 【フィンガープリント】.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
```

SSHで接続できている場合は、以下メッセージが表示されますが、そうでない場合は、configファイルの設定を見直す必要があります。

```
Hi 【ユーザー名】 You've successfully authenticated, but GitHub does not provide shell access.
```
（上記メッセージが表示されたら、SSH接続は成功している。）


### ~/.ssh/config の設定を見直す。
成功メッセージが出ない場合は、以下の手順で設定を見直していきます。

#### ターミナルを開いて、秘密鍵が入っているディレクトリへ移動

```
$ cd .ssh/
```

#### configをvimで編集

```
$ vi config
```

ファイルの中に、SourceTreeが以下のように設定を書いてくれています。

```
# --- Sourcetree Generated ---
Host 【SourceTreeが設定したファイル名】
        HostName github.com
        User 【Githubのユーザー名】
        PreferredAuthentications publickey
        IdentityFile 【秘密鍵のディレクトリ】
        UseKeychain yes
        AddKeysToAgent yes
# ----------------------------
```
これを少しだけ編集します。

vimをインサートモードにします。（キーボードの「i」を打つと、インサートモードになります。）

インサートモードにすると、configファイルが編集できるようになりますので、キーボードの十字キーで「Host 【SourceTreeが設定したファイル名】」と書いてある行に移動し、半角スペースを空けて、「github.com」と追記します。

```
# --- Sourcetree Generated ---
Host 【SourceTreeが設定したファイル名】 github.com
        HostName github.com
        User 【Githubのユーザー名】
        PreferredAuthentications publickey
        IdentityFile 【秘密鍵のディレクトリ】
        UseKeychain yes
        AddKeysToAgent yes
# ----------------------------
```

追記したら、エスケープキーを叩いて、インサートモードから抜けます。
続いて、「:wq（上書きして閉じる）」を叩いて、vimを終了します。

これで、configファイルの設定が終わりました。

改めてSourceTreeを開くと、「アカウントに接続できない」とエラーが表示されることもありますが、SourceTreeの「環境設定」内「アカウント」を再設定すると、問題なく接続できるようになります！

ふー！お疲れさまでした〜〜〜！！！


## ターミナルを使って秘密鍵と公開鍵を作る。
**以下は、自分のための、ターミナルを使って秘密鍵と公開鍵を作る方法メモ**

今回は、SourceTreeを使って秘密鍵と公開鍵を作りましたが、必要な場合に備えて、ターミナルを使って秘密鍵と公開鍵を作る方法もメモしておきます。

### 秘密鍵と公開鍵を作る。
1. ターミナル起動する。
2. 以下コマンドで、Mac内でSSHの鍵を管理しているディレクトリへ移動する。

```
$ cd .ssh
```

3. 以下コマンドを叩いて、秘密鍵と公開鍵を作成。  

```
$ ssh-keygen -t rsa
```
4. 続いて、秘密鍵と公開鍵のファイル名を聞かれますので、わかりやすいように「（GithubのID）-GitHub」と指定します。

以上で、秘密鍵と公開鍵ができました。
まだターミナルでの作業がありますので、そのままにしたまま以下手順へ進んでください。

### 公開鍵をGithubに登録する。
次に、先程作った公開鍵をGithubに登録します。

1. 以下コマンドで、公開鍵をクリップボードにコピーします。

```
$ pbcopy < （GithubのID）-GitHub.pub
```

2. ブラウザからGithubへログインし、公開鍵の設定画面を開きます。
3. key　に先ほどクリップボードにコピーした公開鍵をペーストします。
	Titleには、今お使いの端末がわかるものを入れると管理しやすくなります。（秘密鍵と公開鍵は端末ごとに設定した方がセキュリティが上がります。）
4. add SSH Key　をクリックして、鍵を登録します。


### SourceTreeのアカウント環境設定で、アカウントの内容を変更する。
最後に、SourceTreeの画面から設定を変更します。

1. 環境設定から、アカウントを開く。
2. 「HTTPSでGithubに接続する。」の手順で登録したGithubのアカウントをクリック。
3. 以下の内容へ修正。  
認証タイプ：SSH  
SSHキー：「秘密鍵と公開鍵を作る。」で作った公開鍵が設定されていることを確認。
4. 「保存」をクリック。

以上です！

## 拝見した記事
記事作成にあたり、以下記事も拝見しました。ありがとうございました！

- [【Mac】Gitの環境構築をしよう！](https://prog-8.com/docs/git-env)
- [Mac GitHub SSH接続設定](https://qiita.com/ucan-lab/items/e02f2d3a35f266631f24)
- [SourcetreeからGithubにSSH接続する](https://qiita.com/nobi_tum/items/ec8fbb887f6c1e4fcba4)
- [【プログラミング初心者向け】MacでSourcetreeを使ってGitの開発環境を構築する（GitHub + Sourcetree）](https://kuromame-blog.com/mac%E3%81%A7sourcetree%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6git%E3%81%AE%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B/)
- [秘密鍵・公開鍵を作成する（Mac）](https://qiita.com/reflet/items/0c338df07d9f6c6ef776)