エラーに詰まりながらGit Hubに新規リポジトリを追加するまでの道のり

# はじめに
本記事はプログラミング学習中の筆者がGit Hubのリポジトリに
新規追加するまでの過程を**6ステップ**に分けて記載しております。
途中で発生したエラーも含めて記載するので参考になれば幸いです。

# 前提
* 作業はMacで行いました。
* Git Hubのアカウントは登録済みの状態です。

# 事前準備
Gitは最初からPCにインストールはされていません。
インストールされていない人はHomebrewを用いてGitをインストールします。

``` 
[ターミナル ]
#Gitのインストールのコマンド
% brew install git
# Gitのバージョン情報が表示されれば、Gitは正常にインストールされています。
% git --version  
```


# ローカルリポジトリを作成する
## リポジトリとは？
リポジトリとは、Gitの管理下にあるファイルやディレクトリの変更履歴を保管しておく入れ物です。
管理下に置くことでそのディレクトリ内のファイルやディレクトリの変更履歴を記録することができます。
（例）「日記帳に日々の記録を書く」「家計簿に収入や支出を書く」などイメージすると腹落ちしやすいかも！
また、リポジトリにはローカルとリモートの2種類あります。

|        |  ローカルリポジトリ|  リモートリポジトリ    |
|:---:|:------------------------|:-----------------------|
| 場所| 自分のPC上<br>（ローカル環境）<br>に置くリポジトリ | (外部のサーバなど)<br>ネットワーク上<br>に置くリポジトリ|
| 概要 |自分のPC上にある<br>ファイルやディレクトリの<br>バージョン管理の際に使用|ネットワーク上に置くことで<br>複数人で管理下のファイルや<br>ディレクトリを共有できる。|

[![Image from Gyazo](https://i.gyazo.com/27cde2a5e49f536e3c65c8a0a4c47543.png)](https://gyazo.com/27cde2a5e49f536e3c65c8a0a4c47543)
※画像： [サル先生のGit入門](https://backlog.com/ja/git-tutorial/intro/02/)より引用

##  【作業①】ローカルリポジトリを作成する
まずはGit Hubのリポジトリに追加したいディレクトリを
Gitの管理下に置きローカルリポジトリを新規作成します。
今回は「test_app」を追加するディレクトリとして作業をします。


``` 
[ターミナル]
#test_appディレクトリに移動
%  cd ~/・・・/test_app

#隠しディレクトリである.gitがあるかどうか確認すると、
#「そのようなディレクトリはない」と指摘を受ける。
〜test_app % ls .git  
ls: .git: No such file or directory


#「git init」でディレクトリをGitの管理下に置く
〜test_app % git init 
Initialized empty Git repository in /・・・
/・・・/・・・/test_app/.git/

#隠しディレクトリである.gitがあるかどうか確認
〜test_app % ls .git  
HEAD	config	hooks	objects	refs
```

【ポイント】
新たにGitで管理したいディレクトリに「**git init**」を実行すると、
隠しディレクトリである.gitが作成されGitで管理できるようになる！


##  【作業②】 git add -Aでインデックスにファイルを追加する
インデックスとはバージョンを記録するためにファイルを一時的に登録する場所のことで、<br>これからコミットするファイルの集合しているということです。
そのため、同じバージョンとして記録したい編集についてはまとめてインデックスに追加し、<br>記録したくない編集についてはインデックスに追加しないこともできます。

``` 
[ターミナル]
#現状を確認する
〜test_app % git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
（※インデックスされるファイルまたはディレクトリが記載される）
	.editorconfig
	.env.example
	.gitattributes
	.gitignore
	.styleci.yml
	app/
	artisan
〜以下省略〜

# git add -A-(all)で全ての変更を追加する
〜test_app %  git add -A
〜test_app %  git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   .editorconfig
	new file:   .env.example
	new file:   .gitattributes
	new file:   .gitignore
	new file:   .styleci.yml
	new file:   app/Console/Kernel.php
	new file:   app/Exceptions/Handler.php
	new file:   app/Http/Controllers/Auth/ForgotPasswordController.php
〜以下省略〜

```

##  【作業③】 git commit -m でコミットを反映させる
* コミット:インデックスに追加された変更修正をバージョン記録する操作のこと。
* 何月何日何時に何を変更したかを記録することができます。
* -mをつけると変更内容を記録することができる。

```
[ターミナル]
 test_app % git commit -m "Initialize repository"
[master (root-commit) c7952ce] Initialize repository
87 files changed, 8629 insertions(+)
 create mode 100644 .editorconfig
 create mode 100644 .env.example
 create mode 100644 .gitattributes
 create mode 100644 .gitignore
 create mode 100644 .styleci.yml
 create mode 100644 app/Console/Kernel.php
 create mode 100644 app/Exceptions/Handler.php
〜以下省略〜

test_app % git status
On branch master
nothing to commit, working tree clean

```
commit完了後に```git status```を行うと```nothing to commit```<br>と「コミットの対象となっている変更修正は無いよ」というメッセージを出してくれます。

## 【作業④】リモートリポジトリを作成する
先ほど作成したローカルリポジトリを結びつけるリモートリポジトリを作成します。<br>
(1)まず画面右上のプルダウンでメニューからNew repositoryを選択して新規リポジトリ作成画面へ移動します。
[![Image from Gyazo](https://i.gyazo.com/268ac8e372ac90ed5cdb22ccce76ff78.png)](https://gyazo.com/268ac8e372ac90ed5cdb22ccce76ff78)
(2)新規作成画面に遷移したら下記項目を記入＆選択しリポジトリを作成する。
・Repository nameにリポジトリ名を記入
・Publicを選択（公開する事を前提）
・Create responsitory をクリック

<img width="868" alt="3116b935db22be5e75a4bf2b95934bdcのコピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584383/19115bcd-aa9b-206a-74a4-2be4b99772c8.png">

## 【作業⑤】 ローカルリポジトリにリモートリポジトリを紐付けする。
(1)リモートリポジトリの作成が完了したらURLをコピーします。
<img width="745" alt="fb989ac71c7e66c9edd141aced635b70.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584383/3a90b7be-ddb3-566d-a40e-60f09e7c79fd.png">
(2)ターミナルでコピーしたURLを貼り付けローカルリポジトリとリモートリポジトリを紐付けます。
ターミナルで```git remote add origin 先程コピーしたURL```を入力する。
その後に```git remote```と入力し```origin```と表示されれば紐づけ作業は完了です。

```
[ターミナル]
test_app % git remote add origin https://github.com/自分のユーザーネーム/test_app.git
test_app % git remote
origin
```

#### ※私はここでエラーを起こし詰まりました😭
結論から言うと```git remote add origin 先程コピーしたURL```のorginのあとのスペースを**全角スペース**にしたのがエラーの原因でした。
ちなみに全角スペースしてコマンドを実行すると下記エラーが表示されました。

皆さんスペースは必ず**半角スペース**で行いましょう！

```
% git remote add origin　https://github.com/自分のユーザーネーム/test_app.git
usage: git remote add [<options>] <name> <url>

    -f, --fetch           fetch the remote branches
    --tags                import all tags and associated objects when fetching
                          or do not fetch any tag at all (--no-tags)
    -t, --track <branch>  branch(es) to track
    -m, --master <branch>
                          master branch
    --mirror[=(push|fetch)]
                          set up remote as a mirror to push to or fetch from
```

## 【作業⑥】 ローカルリポジトリでの作業をリモートリポジトリに反映させる
いよいよ最後の作業です。
以下のコマンドをターミナルで実行します。

```
[ターミナル]
#リモートリポジトリ（origin）に情報を反映させる。
test_app % git push origin master
```

もし、pushした際にユーザー名とパスワードの入力を求められた際は下記内容でコマンドを実行して下さい。

```
[ターミナル]
#ユーザー名を求められる時
Username for 'https://github.com' : GitHubのユーザーネームのみ入力する

[ターミナル]
#パスワードを求められる時
Password for 'https://github.com' : GitHubのパスワードのみを入力する
```

全ての作業を終えgithubのページを再読み込みすると登録内容が反映されているのが確認することができます。

別途、今回使用したGitの用語をまとめてみました。
作成時に参考になれば幸いです！




### Git用語まとめ
|用語|内容|
|:------------:|:--|
|git init|・Gitのリポジトリを新規作成する。<br>「.git」と名付けられたサブディレクトリが作成される。|
|git status|インデックスに追加されている変更修正、<br>されていない変更修正を確認することができる。|
|git add|インデックスに追加して、<br>変更修正記録の対象とすることができる|
|git commit|インデックスに追加されている変更修正を、<br>コミットするためのコマンド。、<br>オプションの-コミットメッセージ(-m)を付ければ、<br>変更内容をメモとして残すことができる。|
|git remote add|ローカルリポジトリにリモートリポジトリの情報を<br>付与して紐づけを行うためのコマンド。|
|origin|リモートリポジトリの場所の別名。<br>GitHubのリモートリポジトリに対しては<br>originとすることが一般的。|
|git push|ローカルリポジトリでのコミットを<br>リモートリポジトリ（origin）に反映させる。|


# 参考サイト
* [サル先生のGit入門](https://backlog.com/ja/git-tutorial/intro/02/)
* [Githubに新規リポジトリを追加](https://qiita.com/sodaihirai/items/caf8d39d314fa53db4db)
* [【イラストで覚える】初心者のためのGitとGitHub用語集](https://zukulog098r.com/git/)