（初心者向け）コードをgitで管理する方法　gitのインストールから〜

# 概要
　この記事は初心者の自分がRESTfulなAPIとswiftでiPhone向けのクーポン配信サービスを開発した手順を順番に記事にしています。技術要素を1つずつ調べながら実装したため、とても遠回りな実装となっています。

　前回の[Djangoのテンプレート機能を使ってみる](https://qiita.com/Ajyarimochi/items/9d64b13321f0779fc986)までに作ったシンプルなwebAPIをここから改造します。しかしできれば改造前のコードをそれぞれ保存し、コードを壊した際に戻したり、他の目的に流用できるようにしたいです。ただし単にコードをコピーして保管するのは管理が煩雑になる。そこでgitを活用してコードのバージョン管理を行います。

### 参考
* [【初心者】Gitコマンドの使い方を体系的に覚えよう！【一覧あり】](https://kitsune.blog/git-command)
* [git コマンド branchの作り方](https://qiita.com/TetsuTaka/items/5ab227a8bd2cd7106833)


### 環境
Mac OS 10.15


# 手順

* 開発マシンにGitをインストール
* プロジェクトフォルダをgitのローカルリポジトリにする
* githubにamiAppのプロジェクトを作成

### 開発マシンにGitをインストール

既にGitがインストールされていないか確認する。

```
$ git ―version
```

自分の場合、既にgitがインストールされていました。Xcodeと同時にインストールされるようなので、とりあえずこれを使います。
<img width="392" alt="check-git-version.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/d2be3148-5655-2757-7e7b-bae70e244252.png">


インストールする場合、macでしたらbrewでインストール出来ます。

```
$ brew update
$ brew install git
```

### プロジェクトフォルダをgitのローカルリポジトリにする

ローカルのプロジェクトディレクトリ `…/amiApp/ami_coupon_api` をgitのローカルリポジトリにします。ターミナルで`ami_coupon_api`ディレクトリに移動して、以下のコマンドを実行するだけです。

```
$ git init
```


### githubにamiAppのプロジェクトを作成

githubをリモートリポジトリとして利用するので、githubのアカウントを作ってサインインします。
サインインしたら、左側のフレームの「Repositories」の右側の「New」ボタンを押して、リポジトリ作成画面に進みます。
<img width="1078" alt="signin-github-mark.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/9cdecbcf-8231-4c06-2045-ead995ff0b16.png">


リポジトリ作成画面でリポジトリ名や説明などを入力して、`Create repositories` ボタンを押すとリポジトリが作成されます。今回はこんな設定にしました。

リポジトリ名：ami_api
説明：webAPI（python）とネイティブアプリ（swift）の連携を学習するために作った居酒屋アプリ。クーポンの配信などが出来ます。
Private/Public： Public  （コードが公開されます。もともと公開する予定なのでPublicにしています。）


### これまでに作成したコードをコミット対象ファイルにする

`git add` コマンドでgitで管理したいディレクトリ、ファイルをコミット対象に設定します。

対象のプロジェクトのディレクトリで`git status`コマンドを実行し、状況を確認します。コミット対象にしていないファイルとディレクトリが赤く表示されます。まだ1つも`add`していないので真っ赤です。
<img width="544" alt="check-gitstatus-001-mask.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/ab89958f-afc0-c351-0b46-d2223379bbc0.png">


下記のコマンドで`ami_coupon_ami`をコミット対象にします。

```
$ git add ami_coupon_api/
```

git status コマンドで確認すると、`ami_coupon_api`ディレクトリ配下のファイルがコミット対象に追加されて緑になっています。
<img width="461" alt="git-local-add.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/f1cc1485-66d2-f562-d1f5-172ec6c6e8cf.png">

他のファイルも同じ要領でコミット対象に追加します。全てのファイルを一括で追加する場合は、下記のコマンドを使います。

```
$ git add --all
```


### 現時点の資材をローカルリポジトリにコミットする
ここまでに開発した内容を残すため、まずは自分のPCに作ったローカルリポジトリへコミットします。まずは誰がコミットしたか分かるように、ユーザ名を登録します。

```
$ git config --global user.name “ユーザ名”
```
登録した名前は `git config ―list` コマンドで確認できます。


次にローカルリポジトリへコミットします。コミットする際は`-m`オプションで、コメントを残します。

```
$ git commit -m “コメント本文”
```
上手くいくとこんなレスポンスが返って来ます。
<img width="569" alt="git-first-commit-mask.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/e9ec60c9-e1ff-c919-15f4-ffbb1850f118.png">
<img width="395" alt="git-first-commit-log.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/174930df-26c0-b5ce-71dd-5c8a9ea5c213.png">



### リモートリポジトリにプッシュする

今の時点では自分のPC内で資材を管理している状態です。複数人で作業する場合にコードをシェアしたり、資材をバックアップするには、Githubで作成したリモートリポジトリにプッシュします。

まずは以下の手順でプッシュ先のリモートリポジトリを登録します。

---
1. Githubのマイページで先ほど作成したリポジトリのURLをコピーする（ここで確認できます）
<img width="1018" alt="check-repository-url-github.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/0552a3d8-00d8-5145-59c8-cc9dd2e51423.png">

2. `git remote add`コマンドでリモートリポジトリを登録する。（紐付け名は今後プッシュする際に使うので忘れないようにメモしておく）

```
$ git remote add [紐付け名] [Githubに作成したリポジトリのURL]
```
---


次に、`git push` コマンドで登録したリモートリポジトリにプッシュします。今回は初回なので`master`ブランチにプッシュします。コマンドを実行するとGithubのユーザ名とパスワードの入力を求められます

```
$ git push [紐付け名] [プッシュ先ブランチ]
```

Githubのマイページを更新して、プッシュしたコードが追加されている事を確認します。
<img width="1050" alt="check-pushed-at-github.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/15e1c94a-3d0f-1a63-baa6-350cc3e2cb38.png">


### webAPI改造のためのブランチを作成し、作成したブランチに移動する。

これからwebAPIの改造をするので、改造用のブランチを作成します。まずは既に存在するブランチを確認します。

```
$ git branch
```
<img width="451" alt="check-git-branch-list-mask.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/2b1d4d79-261f-ab9a-90af-c27415e4200b.png">

自分の場合、存在するブランチは master　のみでした。「*」の付いているブランチが現在のブランチです。

`master`ブランチをコピーしてapi改造用のブランチを作成します。
次はレスポンスをJson形式で返すように改造する予定なので、ブランチ名を`develop_chengeToJson`としました。

なお、通常の複数人での開発では git flow という標準的なブランチ運用ルールを適用する事が多いです。その場合、小中規模の変更については`develop`ブランチではなく、その更に枝分かれした `feture`や`backlog`というブランチ名で管理しますが、自分の場合は1人で開発なので、`develop`ブランチをどんどん作成して改造していく事とします。

コピー元のブランチにいる状態で、下記のコマンドを実行します。

```
$ git branch [コピーして作成するブランチ名]
```

新しいブランチ`develop_changeToJason）`が出来ました。
<img width="588" alt="git-make-new-branch-mask.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/83bf57fa-aa4c-b16e-9aab-ae7b3ac96bb0.png">

作成したブランチに移動する時は、以下のコマンドを使います。

```
$ git checkout [作成したブランチ名]
```


ちなみに、`checkout`コマンドに`-b`オプションを付けると新しいブランチの作成と同時に作成したブランチに移動出来ます。恐らく通常はこちらのコマンドを使う方が多いと思います。

```
$ git checkout -b [コピーして作成するブランチ名]
```


### 作成したapi改造用ブランチをリモートに登録する。
ローカルリポジトリに新しいブランチを作成したので、リモートにプッシュします。

```
git push [紐付け名] [作成したブランチ名]
```

なお、-u オプションをつける事で次回から[紐付け名]を省略が出来ます。

```
git push -u [紐付け名] [作成したブランチ名]
```

Githubのマイページを更新すると `develop_chengeToJson` ブランチが増えています。
<img width="1009" alt="check-new-branch-at-github.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/8fdaa2e0-ffbb-cc64-f6fd-36e0ca5a1ae2.png">


以上です。

次回は、[JSON形式でレスポンスをするwebAPIを作成します](https://qiita.com/Ajyarimochi/items/492dccaff21cba567e43)