[初心者向け]Gitの理解/Githubの初pushまで

# この記事の対象者
この記事ではGit/Githubを最低限の範囲で使えるようになるまでを簡単にまとめています。

対象者としては
・GitやGitHubを使ったことがない完全初心者
・Gitを理解して使いこなせるようになりたいが長い記事は読みたくないという方


完全初心者の方の参考になればと思います。（自分の備忘録も兼ねて）

# gitについて
プログラミングをしていると間違えて編集してしまったり消したらいけないコードを消してしまったりすることがあると思います。
簡単な手直しなら手作業でやり直せばいいかもしれませんが、ファイルが沢山あり編集箇所がわからなくなる場合には対処のしようがありませんね。

そんなときにgitを使ってソースコードを管理していると楽になります！

gitを使用することで、
・ファイルのバージョンを管理でき、過去のファイルに戻すことができる
・複数人でのファイルの変更を滞りなく行うことができる
などのメリットがあります。



## gitは分散型バージョン管理システムのひとつ。

分散型とは何なのか。

調べてみると、Wikipediaには以下のように書かれていました。
>分散型（ぶんさんがた）とは、複数のコンピュータなどに分散して機能を持たせること、またはそれで一つの機能を動作させる考え方。集中型の反対の意味として用いられる。

噛み砕いて説明すると、
"開発者がそれぞれ作業スペース（リポジトリ）を持っていて、分担して作業ができる形式"
というシステムです。

※分散型バージョン管理システムの反対として集中型バージョン管理システム（例：SVN）がありますが、こちらは開発するシステムに対しリポジトリが１つです。集中型のリポジトリは中央リポジトリと呼ばれ、ここからソースコードを持ってきて編集し、編集後中央リポジトリに反映させる形式になります。

分散型について詳しく知りたい場合はこちら↓
[ガチで5分で分かる分散型バージョン管理システム](https://www.atmarkit.co.jp/ait/articles/1307/05/news028.html)

ここまでの説明をまとめるとgitは、
・作業スペースを開発者それぞれが持ち
・ファイルのバージョンを管理することができる
システムのことです。

## これだけは覚えておこう
### ファイルを管理する場所の名前
・作業ディレクトリ
・ステージングエリア（WorkSpaceともいう）
・ローカルリポジトリ
・リモートリポジトリ

### ファイルを登録する流れ
①作業ディレクトリからステージングエリアにファイルを追加する
↓
②ステージングエリアからローカルリポジトリにファイルをあげる
↓
③ローカルリポジトリからリモートリポジトリに登録する

### 以下、語句の説明
・作業ディレクトリ
これは自分がコードを書いているそのファイルがある場所のことです。何にも関与していないただのディレクトリの場所のことです。

・ステージングエリア（WorkSpace)
これはgitを用いて管理するための最初の場所になります。

・ローカルリポジトリ
開発者自身が自分のPCに用意することができる場所のこと。
普段の開発はローカルで行い、その変更を公開したい場合はリモートリポジトリに登録（push）するという流れになります。

・リモートリポジトリはクラウドサーバーに存在していて、複数人で共有することができる場所のこと。GithubやBitbucketなどのサービスが有名です。

※リポジトリとは
ファイルやディレクトリの状態を記録し、変更履歴を管理することができる場所のこと。わかりやすく言うと、ファイルを入れておく箱のようなもの。

以上で基礎的に押さえておくべき知識は揃ったかと思います。
以下では実際にコマンドを使ってGitHubへファイルをあげるところまで行なっていきます。

## コマンドを使いGitHubに登録するまでの流れ
### セットアップ
まずは現在作業をしているディレクトリをgitで管理できるようにするためのセットアップを行います。このコマンドは管理したいディレクトリごとに初めの一回だけで大丈夫です。

```
$ git init
```

### ①作業ディレクトリ→ステージングエリア
次は上で述べた"①作業ディレクトリからステージングエリアにファイルをあげる"部分を行います。
ひとつずつファイルをaddしたいときは以下のコマンドを打ちます。

```
/*ファイルをひとつずつあげたい場合*/
$ git add ファイル名

/*ファイルを一括してあげたい場合*/
$ git add -A
/*"-A"を使うことで作業ツリー内のファイルを全て追加することができます*/
```
###②ステージングエリア→ローカルリポジトリ
ステージングエリアからローカルリポジトリへファイルを上げることを、コミット(commit)と言います。コマンドは以下になります。

```
$ git commit -m "コミットメッセージ"
/*コミットメッセージはどういった編集内容なのかわかりやすく書いておくと良い*/
```

addしてステージングエリアにファイルをあげずコミットを行うと、"Changes not staged for commit:"と帰ってくるのできちんとaddしてからコミットを行うようにしましょう。

### ③ローカルリポジトリ→リモートリポジトリ
今回はリモートリポジトリにGitHubを使います。
※まだGitHubを登録できていない場合は登録から行いましょう。以下の記事を参考に登録をしてから次に進みます。
登録の詳しい内容はこの記事では割愛させていただきます。
[GitHub入門 〜アカウントを作成する方法](https://proengineer.internous.co.jp/content/columnfeature/7103)

使用するコマンドは

```
$ git push
```
なのですが、最初にGitHubに上げる際にはこのままではうまくいきません。

```
ec2-user:~/environment/pictgram (master) $ git push
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using

    git remote add <name> <url>

and then push using the remote name

    git push <name>
```
このようになります。リモートのリポジトリはどこやねんと言われてしまいました。
一番最初にリモートにアップロードする場合はきちんと宛先を指定しましょうね、という話です。

ではGithub上で作成したリモートリポジトリのURLをコピーしてきて先ほどのコマンドの続きに貼り付けます。
この際、リモートリポジトリの名前をつける必要があるのですが、この名前は一般的に"origin"という名前を使用します。コマンドは以下のようになります。

```
$ git remote add origin https://github.com/Toshimatu/pictgram.git
```
これでセッティングは終了。これでpushする準備ができたので改めてpushをしましょう。
なお、最初のpushは以下のように指定します。2回目以降は$ git pushのみでpush可能になります。

```
$ git push -u origin master
```

これにてGitHubにファイルの登録ができました！
実際にGitHubに登録されているか確認して、作成したリポジトリにコードが反映されていれば終了です。
これでようやくGitHubが使えるようになりました。ですが初回の登録をしただけで、まだ押さえておかなければいけないことはあります。続きは別記事かこの記事にて書いていこうと思います。（もしくは調べてみてください。）

## 最後に
簡単な説明ですがここまで読んで頂きありがとうございました。
修正等ありましたらご指摘ください。