【GitHub】アプリのバージョン管理を行う

# バージョン管理とは

バージョン管理とは``ファイルの変更履歴の管理``のことだ。

特に複数人でアプリケーション開発をする場合、機能ごとに作業を分割して、それを各個人が進めていくことになるだろう。そして最終的に各作業をつなぎ合わせて１つのアプリケーションになるのだが、バージョン管理はこの過程に不可欠な仕組みだ。

``ファイルの変更履歴＝作業履歴の単位``が、どこでどのようにアプリケーションに組み込まれていくのか、時系列で確認できれば便利だ。さらに作業に誤りがあった場合、遡って該当箇所を取り消すこともできる。

それを提供するのが``バージョン管理システム``であり、自分はその中の１つである``Git``を利用している。

# 作業環境

今回の作業は、以下の環境を前提として行っている。

- gitがインストールされている。（自分はHomebrewで管理している。）
- GitHubに登録済みである。
- GitHubはssh接続されている。

# ローカルリポジトリの作成

まず、自分のPC内で``ファイルの変更履歴の保管場所``を作成しなければならない。その場所を``ローカルリポジトリ``と言う。

## initコマンド

最初にアプリケーションのディレクトリへ移動する。

```
$ cd larabbs
```

``initコマンド``でアプリケーション内に``.git``というローカルリポジトリ用のディレクトリが作成され、初期化される。空の箱を作るイメージだ。このコマンドは一度実行してしまえば、再度行う必要はない。

```
$ git init
Initialized empty Git repository in /Users/[ユーザー名]/workspace/larabbs/.git/
```

## addコマンド

次に、``addコマンド``でローカルリポジトリに``変更履歴を保存したいファイル``を指定する。なお、``Aオプション``を指定すると、現在のディレクトリ以下全てのファイルがその対象となる。

```
$ git add -A
```

## commitコマンド

最後に、``commitコマンド``でaddコマンド実行時に指定した``ファイルの変更履歴``がローカルリポジトリに登録される。``mオプション``の後ろには、メッセージを登録する必要がある。

今後、``commitコマンド``を行うごとに``差分（以前のcommitからの変更履歴）``が登録される。

```
$ git commit -m "first commit"
[master (root-commit) 8b94e0d] first commit
 98 files changed, 7539 insertions(+)
 create mode 100644 .env.example
 create mode 100644 .gitattributes
 create mode 100644 .gitignore
 create mode 100644 app/Article.php

# 以下省略
```

## statusコマンド

``statusコマンド``で、現在のcommitの状況が確認できる。全てのファイルがcommitされていれば、以下のメッセージが表示される。

```
$ git status
On branch master
nothing to commit, working tree clean
```

# リモートリポジトリの作成・登録

自分は、[GitHub](https://github.com)という超メジャーなサービスを利用している。ここに``リポジトリ（リモートリポジトリ）``を作成することにより、他人とアプリケーションの構成に必要な情報を共有することができる。

## リモートリポジトリの作成

``New repository``で新しいリモートリポジトリを作成する。以下の項目を入力・選択すれば問題ない。

- ``Repository name``にアプリ名を入力する。
- ``Public``を選択する。
- ``Initialize this repository with a README``はチェックしない。

公開方法は無料枠の``Public``なので、``自分のコードは誰でも見られる状態になる``ことは了承しておく。

さらに、環境変数など他人に見られては困るファイルがあれば、あらかじめ``.gitignore``を作成し、その中に該当のファイル名を記述しておくこと。（Laravelはデフォルトで作成されていた。）そうすれば、リモートリポジトリに該当ファイルの履歴（内容）が送られることはない。

## リモートリポジトリのアドレス登録

作成したリモートリポジトリに移動し、先ほど``ローカルリポジトリにcommitした内容をリモートリポジトリへ送る（pushする）``準備をする。

送付先であるリモートリポジトリのアドレスは、``Clone or download``で確認が可能だ。自分の場合はGitHubと``ssh接続``しているため、gitから始まるアドレスを指定する。

まず、``remote addコマンド``で送付先のアドレスを登録する。以降のコマンド入力も、全てアプリケーションのディレクトリで行う。

```
$ cd larabbs
$ git remote add origin git@github.com:[ユーザー名]/larabbs.git
```

上記のコマンドで、``origin``の名前で送付先アドレスである``git@github.com:[ユーザー名]/larabbs.git``が登録された。

これで、pushする度にアドレスを入力する手間が省ける。

## pushコマンド

``pushコマンド``で、ローカルリポジトリのcommit内容をリモートリポジトリへ送る。

```
$ git push origin master
Counting objects: 132, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (115/115), done.
Writing objects: 100% (132/132), 173.17 KiB | 1.53 MiB/s, done.
Total 132 (delta 17), reused 0 (delta 0)
remote: Resolving deltas: 100% (17/17), done.
To github.com:[ユーザー名]/larabbs.git
 * [new branch]      master -> master
```

これで、GitHubの該当リポジトリを選択すると変更履歴（ファイル内容）が表示されるはずだ。

# 参考記事

今回お世話になった記事・サイト様を紹介する。

とにかく簡潔で分かりやすい。
[【Git】オレならこう説明する！Git初心者への用語説明](https://qiita.com/nnahito/items/e546b27f73e7be131d4e)

こちらは詳しく図解されている。``SourceTree``というソフトが利用されているので、作業過程が視覚的に理解しやすい。
[【連載Git入門目次】ほんとは簡単？SourceTreeでGitを始めよう！](https://naichilab.blogspot.jp/2014/01/gitsourcetreegit.html)
[サルでもわかるGit入門〜バージョン管理を使いこなそう〜](https://backlog.com/ja/git-tutorial/)

今回はここまで。