初心者がGit,GitHubを初めて取り組みました。

#はじめに
SSHKeysの作成からGitの挿入、GitHubのリポジトリの作成、GitからGitHubに反映させる一連の方法まで学びました。

#Gitとは何か？
まず、Git?GitHub?という感じだったのでそれらについて調べてみました。
一言で言えば、Gitはプログラミングのソースコードの変更記録や追跡を行えるバージョン管理システムのことです。そして、GitHubに作成したリポジトリを通して自分以外の人に共有できます。これは業務を行う上で１つのシステムに対して、各々でブランチして並行して取り組み、最終的にマージすることにより作業効率の向上を図ることいができます。

#今回学んだ、用語とコマンド
#リポジトリ（repository）
リポジトリとは、プログラムやファイルを保管しておく貯蔵庫のようなもの。
リポジトリは以下の2種類の分かれている。

- ローカルリポジトリ:自身のサーバー上に保管され、管理できるリポジトリです。

- リモートリポジトリ:特定のサーバー上に保管され、複数人で共有できるリポジトリです。

基本的には、普段の作業はローカルリポジトリ上で行い、作業内容の共有であったり、共同に作業する場合の共有はリモートリポジトリで行うという流れになる。

#コミット(commit)
コミットとは、ファイルやディレクトリの編集作業を記録するための操作のことです。
一度、コミットすると編集した日時が記録されファイルとして保存される。ファイルは、時系列順に並んでおりその都度、編集した履歴や内容を確認できる。

#作業ディレクトリとインデックス
作業ディレクトリとは、自身が編集している作業中のディレクトリのことを言います。また、インデックスとは作業を行う作業ディレクトリとファイルを保存するローカルリポジトリの中間のエリアのことを指します。作業ディレクトリで編集したファイルをコミットする場合、一度インデックスに保存しなければならない。コミットする前の仮置場のような場所である。

#ブランチ(branch)
ブランチとは、作業を分岐させて履歴の流れを記録することである。バグが発生した場合の修正であったり、新たな機能の追加をしたい場合にブランチを行うことにより、複数人で作業を行うことができます。

#マージ(marge)
マージとは、上記で説明したブランチされた複数のものを組み合わせることをいう。マスターブランチにバグの修正や機能の追加を行ったブランチを統合することができる。

#クローン(clone)
クローンとは、リモートリポジトリの中身を自身のローカルリポジトリに新たなファイルを作成し保存することです。複数人でファイルを共有している時に始めに行う作業です。

#プッシュ(push)
プッシュとは自身のローカルリポジトリのファイルをリモートリポジトリに送信して保存を行うことです。基本的に共有してるファイルをクローンして、編集してコミットしてプッシュするといった流れである。

#プル(pull)
プルとは、共有されているリモートリポジトリのファイルの内、自身のローカルリポジトリに無いファイルや更新されたファイルを取り込むことです。クローンとは違い、プルはリモートとローカルリポジトリ内の差分のみを取り込みます。

#学んだコマンド一覧

| コマンド　| 内容　|
|:-:|:--|
|  mkdir　好きなファイル名 |  作業用ディレクトリの作成。 |
|  cd　ファイル名 |  ファイル名のディレクトリに移動。 |
| pwd  |  現在のディレクトリの場所の確認。 |
|  git init |  gitでしようする宣言。 |
| vim ファイル名  | ファイルを開き、編集できる。ファイルが無い場合、作成。  |
| wq  | 保存する。  |
| cat ファイル名  | ファイルの確認。 |
| git log  |　履歴の確認。<br>--oneline:IDとメッセだけの表示。<br>-p:変更箇所だけ表示。<br>--start:どのファイルが何箇所変わったか見る。  |
|  git　status | どのファイルどのような状況か確認。 |
| git diff  |  作業用ディレクトリにあるファイルの内、どこをどう編集されたかの確認。<br>--cached:インデックスのファイルの確認。 |
|  git add　ファイル名 |  インデックスに上げる。<br>add.:作業用ディレクトリを全てインデックスする。 |
| git rm ファイル名 |  ファイルの削除。 |
|  git mv　ファイル名 | ファイルに移動。  |
| vim .gitignore  | .gitignoreに記載されたファイルはaddなどされなくなる。  |
|  git commit　ファイル名 | ファイルをコミットする。<br>-m:コメントを記載して、エディタを立ち上げず、コミットする。<br>--amend:直前のコミットを変更する。  |
| git reset  | すでにaddしたものを作業用に戻す。  |
| git branch  | 今いるブランチの確認。<br>-d:ブランチの削除。<br>--marge:マスターに切り替えた状態でマージ済み一覧の確認。  |
| git checkout ファイル名  | 入力したブランチに移動する。<br>-b:ブランチの作成し、作成したブランチに移動するを一括で行う。  |
| git marge ブランチ名 | マスターブランチに行き、入力したブランチがマージされる。  |
| git stash save ファイル名  | まだコミットしたく無いものを避難させる。  |
|  git stash list | stashしたlistの確認。 |
| git stash pop  | stashから取り出す。  |
|  git tag 好きなタグ名 | 直前のコミットにタグをつける。<br>コミットID:入力したコミットIDにタグをつける。<br>-d:ダグを消す。  |
| git remote add origin リポジトリ先  |  共有リポジトリに新たなファイルを作成する。ファイル名はoriginがだいたいつけられる。 |
| git remote re origin  |  共有リポジトリから削除。 |
|  git push origin master | masterの内容をoriginに入れる。  |
| git pull origin master  |  originの内容をmasterに取り込む。 |
| git clone ファイル名  | 共有リポジトリの内容をローカルに作成する。  |
| git config --help  | ヘルプの確認。  |
| git config -l  | 設定の確認。  |
| git init --bare  |  共有リポジトリの作成。 |

#今回行った一連の内容
[gitのインストール](https://git-scm.com/)
[GitHubのアカウント作成](https://circleci.com/integrations/github/?utm_source=gnb&utm_medium=SEM&utm_campaign=SEM-gnb-Github-Eng-ni&utm_content=SEM-gnb-Github-Eng-ni-Github&gclid=CjwKCAjw_Y_8BRBiEiwA5MCBJpzADVpjg9CMXv41VH3ktoZ8W7enT8VHTcpqq6P-vkcU8Cgb22jaKBoC6XsQAvD_BwE)
まず初めに上記のリンクからGitのインストールとGitHubのアカウントを作成した前提で話を進めて行きます。

- **SSH Keyの作成**
<br>GitHubを利用するにはSSHKeyを登録しなければなりません。なのでまず初めにターミナルを開き、鍵の有無を確認します。

`$ ls -al ~/.ssh`
<br>なければ次のように帰って着ます。

<br>`ls: /Users/Username/.ssh: No such file or directory`
<br>無いとの回答が帰って着たので、作成します。
<br>`$ ssh-keygen  # 私はデフォルトのままで作成`
<br>鍵の保存先やパスフレーズを聞かれますが全て何も書かず、enterを押しました。
<br>`$ cat ~/.ssh/id_rsa.pubssh-rsa ~~~公開鍵~~~ @MacBook-Pro.local`
<br>catコマンドでファイルを開き、公開鍵の部分をコピーします。

- **GitHubにKeyの登録**
<br>GitHubにログインして、コピーしたSSH Keysを登録します。作成したアカウントでGitHubにログインしたら画面右上にあるGitHubメニューの「**Settings**」アイコンをクリックして設定画面を開きます。「**SSH Keys**」の設定画面より「**Add SSH Keys**」ボタンを押し、SSH Keysの登録画面に進みます。SSH Keysの「**登録名（Title）**」とコピーした「**SSH Keys**」を入力し、「**Add Keys**」ボタンを押したら登録完了です。「**登録名**」は何でもいいです。

- **共有リポジトリの作成**
<br>画面右上にあるGitHubメニューの「**＋**」ボタンを押し、「**New repository**」を選択すると、リポジトリ作成画面が表示されます。「**リポジトリ名**」、「**リポジトリの概要**」、「**パブリック設定**」を行い、「**Create repository**」ボタンを押すと、新しくリポジトリが作成されます。これでGitHubの作業は全て終了です。

-**Gitのファイルを共有リポジトリに送信する方法**
<br>まず送信するファイルに移動します。
<br>`$ cd ファイル名`
<br>コミットしてない場合は全てコミットします。
<br>` git add .`
<br>`git commit -m "コメント"`
<br>リモートリポジトリ内にファイルを作成する。
<br>`git remote add origin リモートリポジトリのURL`
<br>originと名前をつけたファイルにmasterのファイルを送信する。
<br>`git push origin master`
<br>こうするとGitHubに作成したリポジトリにローカルリポジトリでさ作成したソースコードが反映されます。

#取り組みを終えて（つまずいた点などのおさらい）
完全初心者ながら、これまでの一連の作業を終えてものすごく達成感が味わえました。私は、Git?ターミナル？という状態だったのでまずパソコンで作業する前に自身が理解していない言葉を一語一句調べ、理科するということがとても時間を要しました。
`git: 'add.' is not a git command. See 'git --help'.`
`cat: file: No such file or directory`
また、作業をしていると慣れていないので、上記のような想像していた答えと違うものが回答で出てきた時に、何をいっているのかわからずとても戸惑いました。初めて触るものなので、わからなくて当然です。なので調べ改善して、またエラーが発生したら調べ、改善しての繰り返しでした。幸い、今回はそれほど難しい作業ではなかったので、空白などの入力間違いや、ファイルの指定ミスで済みました。今後、Gitを使う作業が増えてくると思うので、自身でこれをみて慣れて行きたいです。