【Git】リモートからローカルにリポジトリをクローンしてプッシュするまで

PCセットアップの練習のため、一度PCを初期化しました。
ソース管理はGitHubで行っておりました。

PC初期化に伴い、リモートリポジトリはGitHub上にあるもののソースコードを編集するのに必要なローカルリポジトリがPC上に存在していない状態になってしまっています。

そこで、GitHub上にあるリモートリポジトリからローカルリポジトリをクローンする一連の流れを試したので、記事にまとめてみました。

自身が業務をする上での備忘録として活用することを目的としています。
初心者がまとめた記事なので、間違った認識をしている可能性があります。
間違い等がございましたら、ご指摘いただけると幸いです。


# そもそもGitとは？
エンジニアがソース管理をするサービスの中の1つです。
ソース管理するサービスはいくつもありますが、GitHubやGitLabがメジャーのようです。


# どうやってソース管理をするの？
Git上でプロジェクトを作って管理をします。
また、このプロジェクトのことをリポジトリといいます。

リポジトリにはリモートリポジトリとローカルリポジトリの2種類があります。


# リモートリポジトリ・ローカルリポジトリとは？
<img width="960" alt="2019-07-16 (2).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463391/86b200eb-0d54-1161-fba3-ee87a31c4eaa.png">
GitHubやGitLab上で作ったリポジトリのことをリモートリポジトリといいます。
リモートリポジトリがあるだけでは作業はできません。
リモートのバージョンをコピーしたものをローカルに持って行かないと作業ができないのです。

このリモートからローカルにコピーすることをクローンと呼びます。

# ローカルリポジトリを作る方法
今回は既にGitHubやGitLab上でリモートリポジトリが作成されていることを前提としています。

- クローンする

クローンする際に使用するURLはGitHub上のリモートリポジトリ内にある画面右側にある緑色のボタン「Clone or download」をクリックするとURLがコピーできます。

一連のコマンドは下記の通りです。

### クローンする

```
git clone (URL)
```

# クローンしたリポジトリを編集してプッシュする方法

次にクローンしたリポジトリのファイルを編集したり、新しいファイルを追加したあとにリモートリポジトリにプッシュするまでの一連の流れをまとめました。

- ステータスを確認
- インデックスに追加
- コミットする
- プッシュする

### ステータスを確認

```
git status
```

### インデックスに追加

```
git add .
```

### ステータスを確認

```
git status
```

### コミットする

```
git commit -m '(メッセージ)'
```

### プッシュする

```
git push origin master
```

# 実際の画面で見てみよう

### 1.クローンする

<img width="958" alt="コメント 2019-07-22 192142.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463391/c172bd9f-7e66-5fb2-ce74-348972ed6f1d.png">
GitHubにログインし、事前に作成しておいたリモートリポジトリ内にあるURLをコピーします。
<img width="467" alt="コメント 2019-07-22 145122.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463391/4a614ad9-ab76-1d5e-7282-e9bd655299e1.png">
ローカルリポジトリを作成したいフォルダ内でGit Bash Hereを開きます。
<img width="464" alt="コメント 2019-07-22 194201.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463391/eacc15b4-96cb-df73-915e-92aad759ede5.png">
 `git clone (URL)` とコマンドを入力します。
 `Enter` すると、.gitといったフォルダが作成されます。
この.gitフォルダには、Gitの情報が保管されているので削除してはいけません。

### 2.カレントディレクトリを移動

<img width="442" alt="コメント 2019-07-22 193313.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463391/cfb56ae1-3dc3-9337-9eeb-c58921caa198.png">
Git Bushのカレントディレクトリをクローンしたリポジトリに移動させます。

### 2.5ファイルを編集
Git Bush上では特に操作はしません。
エディタなどでファイルの編集を行います。

### 3.ステータスを確認

<img width="443" alt="コメント 2019-07-22 193457.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463391/92c87170-7a9d-b5d8-404d-2e7dae7e46ec.png">
クローン出来たか確認するため、ステータスを確認します。
 `git status` とコマンドを入力し、上の画像のように赤字でフォルダ名が表示された場合は変更がある状態です。

### 4.インデックスに追加する

<img width="442" alt="コメント 2019-07-22 193600.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463391/a0a56477-25a8-e73e-b2a5-3334f0c1b664.png">
フォルダ名が赤字で表示されたら `git add　.` または `git add (フォルダ名)` とコマンドを入力します。
コマンド `git add .` を入力した場合は、変更のあるすべてのファイルがインデックスに追加されます。

### 5.ステータスを確認する

<img width="442" alt="コメント 2019-07-22 193737.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463391/7b875909-9103-edda-80a2-b127ae86e162.png">
もう一度、 `git status` とコマンド入力し、赤字が緑字になっていれば正常にインデックスに追加された状態です。
緑字になったファイルがコミット対象となるファイルです。

### 6.コミットする

<img width="443" alt="コメント 2019-07-27 185647.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463391/dccb891c-4710-502c-2a5b-29c10fa074a5.png">
 `git commit -m '(メッセージ)'` とコマンドを入力すればコミット完了です。

### 7.プッシュする

<img width="442" alt="コメント 2019-07-27 185737.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463391/8e09422b-5652-df7d-1202-34ece3271d15.png">
コマンド `git push origin master` を入力したらプッシュ完了です。
きちんとプッシュまで終わっているかはGitHubで確認しておきましょう。
<img width="758" alt="コメント 2019-07-27 190121.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463391/6543dfd6-f7aa-f850-d690-56a10221a62c.png">
GitHubの該当リポジトリに入り、「commits」をクリックするとプッシュされているか確認ができます。

# まとめ
流れさえ分かってしまえばどういってことない作業でした。
コマンドもそこまで複雑なものではないので、慣れれば覚えてしまえると思います。

今回はブランチという概念を無視した流れをまとめています。
本来はマスターに直でプッシュすることを禁止している場合があります。
ブランチを使ったプッシュ方法に関しては、別の記事にまとめようと思います。