Git
iOS

Gitのブランチモデルについて

More than 1 year has passed since last update.

はじめに

5日目は、スマートテック・ベンチャーズの奥寺(@okuderap )が担当いたします。

今回はGitのブランチモデルについてです。
私はGitを使い始めたばかりの頃、masterブランチ1本で開発進めてしまったり
どのようにブランチを使い分ければ良いのか全然わかりませんでした。

私が経験した好ましくないケースをいくつか挙げて
最後に、それらの問題点を解消したブランチモデルをご紹介いたします。

iOS開発において、Gitを使った経験を記載します。
製品やサービスの開発に利用する場合は通じることがあると思いますが、
プロジェクトによって変わる部分もございます。

Case1: masterブランチ1本

私がGitを触り始めたばかりの頃はこの使い方でした。

【開発作業の流れ】
1. なんでもかんでもmasterブランチにコミットする

【登場するブランチ】
master:
 開発を進めたら全てこのブランチにコミットされる

イメージ
Case1.JPG

【問題点】
・リリースした時点などの安定バージョンを残すことができない。
などなど。

Case2: master&developブランチ

Case1から半歩進んだ?ぐらいです。

【開発作業の流れ】
1. 開発開始時点でmasterブランチからdevelopブランチを作成
2. 開発作業中は全てdevelopにコミット
3. リリース時点でdevelop → masterマージ

【登場するブランチ】
master:
 リリースした時点のソースコードを管理するブランチ
develop (masterから派生):
 開発作業用のブランチ

イメージ
Case2.JPG

【問題点】
・実装済みの特定の機能に仕様変更が発生した場合、対応が困難
などなど。

Case3: master&develop&featureブランチ

【開発作業の流れ】
1. masterブランチからdevelopブランチを作成
2. developブランチから実装する機能毎にfeatureブランチを作成
3. featureブランチで実装完了した機能はdevelopブランチにマージ
4. リリース時点でdevelop → masterマージ

【登場するブランチ】
master:
 リリースした時点のソースコードを管理するブランチ
develop (masterから派生):
 開発作業の主軸となるブランチ
feature (developから派生):
 実装する機能毎のブランチ (feature/◯◯, feature/xxなど)

イメージ
case3.JPG

【問題点】
・リリース作業時の調整もdevelopブランチに依存している
・リリース後に致命的な不具合が発覚した場合に対応するブランチがない
などなど。

現在使用しているブランチモデル

諸々の問題を解決できる現在運用しているブランチ設計をご紹介します。

【開発作業の流れ】
1. masterブランチからdevelopブランチを作成
2. developブランチから実装する機能毎にfeatureブランチを作成
3. featureブランチで実装完了した機能はdevelopブランチにマージ
4. リリース作業開始時点で、developからreleaseブランチを作成
5. リリース作業完了時点で、releaseからdevelop, masterブランチにマージ

【リリース後の障害対応の流れ】
1. masterブランチからhotfixブランチを作成
2. hotfixブランチで障害対応が完了した時点で、develop, masterブランチにマージ

【登場するブランチ】
master:
 リリースした時点のソースコードを管理するブランチ

develop (masterから派生):
 開発作業の主軸となるブランチ

feature (developから派生):
 実装する機能毎のブランチ (feature/◯◯, feature/xxなど)

release (developから派生):
 developでの開発作業完了後、リリース時の微調整を行うブランチ
 (バージョン番号の変更などで使いました。)

hotfix (masterから派生):
 リリースされた製品に致命的なバグ(クラッシュなど)があった場合に緊急対応をするためのブランチ

イメージ
now.JPG

参考

A successful Git branching model
http://nvie.com/posts/a-successful-git-branching-model/

最後に

スマートテック・ベンチャーズでは、未経験だけどiOSの開発をやりたい!という人を募集しています。
Advent Calendarのスマートテック・ベンチャーズページに会社およびWantedlyのURLをのせていますので、興味のある方は是非ご覧ください。
http://qiita.com/advent-calendar/2016/stv

明日は@EnoMtさんです。
お楽しみに!