(No.3) おじさんが、Git・GitHubを利用できるようにしてみる - GitHubからリポジトリを複製（クローン）する

# 前回までのあらすじ
- GitHubにユーザを登録した。
    - [(No.1) おじさんが、Git・GitHubを利用できるようにしてみる - GitHubにユーザを登録する](https://qiita.com/resojisan/items/4cd09b7a5f33ca8a925d)
- GitHubを利用してみた。
    - [(No.2) おじさんが、Git・GitHubを利用できるようにしてみる - GitHubを利用してみる](https://qiita.com/resojisan/items/75dcc83ea55af0db329f)
        - Gitは、成果物（ファイル）の変更内容や履歴を管理する保管場所（リポジトリ）が必要だってわかったよ。
        - リポジトリは、特定の場所にだけ存在するものではなく、そのリポジトリを必要とする人のコンピュータ上に丸ごと複製する仕組みのようだよ。
        - 複製したリポジトリは、各々のコンピュータ上で好き勝手に育てることが出来るようだよ。
        - 成果物（ファイル）の編集後、編集内容や履歴をリポジトリに追加するには、次の手順が必要だったよ。
            - 成果物（ファイル）を編集する。
            - 編集した成果物（ファイル）のスナップショットを、Staging Areaに追加。（git add）
            - コミットする。(git commit)
        - おじさんの編集内容や履歴を保存したリポジトリを、他人に共有することが出来れば、結果的に、おじさんの成果物を共有したことになるよ。
            - リポジトリを共有する手段のひとつとして、GitHubがあるよ。
            - 前回、おじさんのコンピュータ上で作成したリポジトリの内容を、GitHubに反映することが出来たよ。(git push)

# 前回までの反省点
- おじさん、反省ばかりの人生だよ。
- おじさん、せっかちだから、説明書を読まずに作業しがちだよ。
    - [ここ(Git Book)](https://git-scm.com/book/en/v2)に、Gitに関する大切なことの多くが書かれていたよ。
    - 急がば回れって言葉、本当だったんだね・・・。
- 早速、心が折れそうになったよ。
- 難しい横文字がたくさん出てきて、混乱したよ。同じようなことを意味するのに、異なる単語が出てきたり・・・。
- 言葉にムラがあると、おじさんでもしんどいのに、読む人はもっとしんどいよね・・・。
    - おじさんのコンピュータ上のリポジトリを、ローカルリポジトリと呼ぶことにしたよ。
    - GitHubのような公開するリポジトリを、リモートリポジトリ、または、単にリポジトリと呼ぶことにしたよ。
    - おじさん、自分が嫌なことは人にもやってはいけないって言われて育ってきたんだ。すっかり忘れてたよ。
- おじさんは、いつか理解出来る日が来ると信じて、逃げないで頑張ってみるよ。

# 今回の目的
- 前回、おじさんはGitHubにリポジトリを作成して、おじさんのローカルリポジトリをGitHubのリポジトリに反映することが出来たよ。
- 今回は、おじさん以外の人でも、おじさんが作成したGitHubのリポジトリを複製（クローン）することが出来るか確認するよ。
    - おじさんの成果物を共有出来るようにすることが目的だよ。まだ何もないけどね（照）。

# GitHubのリポジトリを、ローカルリポジトリに複製（クローン）する
- おじさんが作成したリポジトリは次のリンク先にあるよ。  
[https://github.com/resojisan?tab=repositories](https://github.com/resojisan?tab=repositories)
- Qiitaを書いている時点では、「test」という名前のリポジトリしかないけどね・・・ 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419842/d3525de8-4720-b06d-a5f7-624500ad6ce2.png)
- さらに[testのリポジトリの中](https://github.com/resojisan/test)をみてみるよ。　　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419842/e5f5b740-b58c-e289-6f93-5b7f5f4d7db8.png)
- README.mdというファイルが一つだけ保管されたリポジトリだってことがわかるよ。
- 今回はこのリポジトリを、おじさんのコンピュータの適当な場所に複製（クローン）しようと思うんだ。
    - こんなダメなおじさんでも複製（クローン）することが出来るなら、他の人もおじさんと同じように複製（クローン）出来るってことだと思うんだ。

## 前提
- おじさんと同じことを試す場合は、前回までの手順のように、Gitをインストールしておく必要があるよ。  
[(No.2) おじさんが、Git・GitHubを利用できるようにしてみる - GitHubを利用してみる](https://qiita.com/resojisan/items/75dcc83ea55af0db329f)
- 前回と同様にターミナルを使ってコマンドを入力するよ。


## コマンドで、作業するフォルダ（ディレクトリ）の場所を変更するよ
- どこに複製（クローン）したのかわかってないと、おじさん混乱しちゃうからね。だから、テスト用のフォルダ（ディレクトリ）を作りたいんだよ。
- ターミナル上で次のコマンドを入力してエンターを押下してみて。（Windowsの場合はコマンドプロンプトって名前の似たものがあるらしいよ）
    - コマンド: `cd ~`
    - 結果: 作業中のフォルダ（ディレクトリ）を移動する。 ~（チルダ）を指定すると、移動先は[ホームディレクトリ](https://ja.wikipedia.org/wiki/%E3%83%9B%E3%83%BC%E3%83%A0%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA)になる。
    - 解説: cdコマンドを使うと、ターミナルが作業するフォルダ（ディレクトリ）の場所を移動することが出来るんだよ。  
    移動先の場所をcdコマンドの右側に指定するのだけど、今回は~（チルダ）って書いたよ。  
~（チルダ）を指定すると、macOSにログインしているユーザの個人フォルダのような場所を意味するみたいだよ。このフォルダ（ディレクトリ）を、[ホームディレクトリ](https://ja.wikipedia.org/wiki/%E3%83%9B%E3%83%BC%E3%83%A0%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA)と呼ぶらしいよ。  
    本当に移動したかどうかは、前回のpwdコマンドで確認してみるといいよ。（/Users/oyajiみたいに、表示されるはずだよ）

## コマンドで、テスト用のフォルダ（ディレクトリ）を作成するよ
- ターミナル上で次のコマンドを入力してエンターを押下してみて。
    - コマンド: `mkdir sutekinaoyaji`
    - 結果: ターミナルの現在の作業場所に、「sutekinaoyaji」という名前のフォルダ（ディレクトリ）が作成されるよ。
    - 解説: 省略するよ。

## 作成したフォルダ（ディレクトリ）の中で実験するよ
- 前手順で作成したフォルダ（ディレクトリ）に作業場所を移動するよ。
- ターミナル上で次のコマンドを入力してエンターを押下してみて。
    - コマンド: `cd ./sutekinaoyaji`
    - 結果: sutekinaoyajiフォルダ（ディレクトリ）に作業場所が移動するよ。
    - 解説: cdコマンドで作業中のフォルダ（ディレクトリ）を移動するよ。「./」は、現在作業中の場所を表すよ。なので、現在作業中の場所にある「sutekinaoyaji」に移動する、との意味になるよ。今後も使うことがあるみたいだから、今回試しに書いてみたんだよ。

## GitHubに戻って、複製（クローン）元リポジトリの場所を調べるよ
- [https://github.com/resojisan/test](https://github.com/resojisan/test)にある「Clone or download」ボタン（緑のボタン）を押下するとわかるよ。  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419842/a051dfbc-8749-9ffe-611c-db5cf35c9941.png)
- 「https\://github.com/resojisan/test.git」がリポジトリの場所を表す文字だよ。これは複製（クローン）するときに必要な情報だよ。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419842/7ac40235-aaad-77ab-7fbb-80fe9c06dfbf.png)



## いよいよ、GitHub上のリポジトリを、複製（クローン）するよ！
- ドキドキするね。
- ターミナル上で次のコマンドを入力してエンターを押下してみて。
    - コマンド: `git clone https://github.com/resojisan/test.git`
    - 結果: 次のように表示され、ローカルリポジトリとして複製されるよ。  
Cloning into 'test'...  
remote: Enumerating objects: 3, done.  
remote: Counting objects: 100% (3/3), done.  
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0  
Unpacking objects: 100% (3/3), done.
    - 解説: 「git clone」コマンドで、他所のリポジトリをローカルリポジトリに複製（クローン）することが出来るよ。「git clone」の右側には、複製元のリポジトリを表す場所を指定するよ。これは前手順でGitHub上で確認した情報のことだよ。
    - マニュアル: [Getting a Git Repository](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository)

## 本当に複製出来ているのか、Finderでも確認してみる。
- Finderの「移動」メニューにある「フォルダへ移動」を選択。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419842/3acf8319-0c10-42b0-fc6d-6ad4eb7219c6.png)
- 「~/sutekinaoyaji」と入力して移動ボタンを押下。(ここでも~チルダが使えるんだよ)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419842/cac00fce-254d-f6d3-538c-5dc7caf8475e.png)
- おお！ testフォルダと、README.mdがダウンロードされていることがわかるよ！![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419842/d086afe7-40fc-0725-2273-cb425fe64c53.png)
- でも、前回のおじさんの奮闘ぶりを見守ってくれている人からすると、「.git」フォルダ（ディレクトリ）がないことに気が付いたかもしれないね・・・。
    - .git directory: ローカルリポジトリそのもの。 他のリポジトリを複製（クローン）したならば作成されるはずだよね。
- 実際は「.git」は作成されているのだけど、フォルダ名の先頭に「.（ドット）」があると、Finderがみえないように隠してしまうからなんだ。
- Finder上で、[command] + [shift] + [.(ドット)]のキーを同時に押下すると、前述の隠されたファイルが表示されるようになるよ。（元に戻したい場合は、再度先程の3つのキーを同時に押下すれば良いよ）![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419842/9139cd86-bd2c-243a-2082-ff701c2d2dfd.png)
- .git（ローカルリポジトリ）も作成されていることが確認出来たよ!!


# あとがき
- 今回の手順で、おじさんがこれから作成する（はず）の成果物を、おじさん以外の人にも配ることが出来るようになったよ。
- 次回以降は、Gitに限定せずに、プログラミングに一歩近付くような作業をやってみたいと思うよ。
- 他の作業を進めていくなかで、Gitの使い方は記録していくことにするよ。


# 参照
- [Git Book](https://git-scm.com/book/en/v2)
- [Git Reference](https://git-scm.com/docs)
- [Git Architecture](https://www.slideshare.net/alexprut/git-architecture)
- [ソフトウェア構成管理、SCM(software configuration management)](https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E6%A7%8B%E6%88%90%E7%AE%A1%E7%90%86)
- [バージョン管理システム](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)
- [リポジトリ](https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA)
- [Why GitHub? - Features](https://github.com/features)
- [https://git-scm.com](https://git-scm.com)
- [https://ja.wikipedia.org/wiki/GitHub](https://ja.wikipedia.org/wiki/GitHub)
- [https://ja.wikipedia.org/wiki/Git](https://ja.wikipedia.org/wiki/Git)
- [コマンドラインインタプリタ](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF)