Git-flow

Gitでのバージョン管理を導入してないプロジェクトでGitを使い始める機会がありました。git-flowを使うことにしたので、READMEに手順などを書こうと思ったのですが、なかなかすんなりと解説を書けなかったので、自分のためのまとめです。

※ SourceTreeの使用を前提としてます

Git Flowを始める

右上の「Git flow」を選択すると、Git Flow向けにリポジトリを初期化してくれます。

Git Flowでは

  • master: リリース用
  • develop: 開発用。featureの組み込みブランチ
  • feature/hoge: 作業用。developを親として作り、終わったらdevelopにマージする
  • release/hoge: featureがリリースできるようになったら、developから分岐させる
  • hotfix/hoge: 緊急対応用。masterから分岐し、終わったらdevelopとmasterにマージする。

といったブランチを使うので、それぞれの名前、プリフィックスを指定できます。特にデフォルトのまま変更しません。これでGit Flowに沿ったワークフローを開始します。

developブランチ

上の画面で「OK」を押すとmasterに加えてdevelopブランチが作成されます。developブランチには全ての開発履歴が集約される事になります。

featureブランチ

新しい機能の開発などフィーチャーを開発するためにdevelopブランチを元にしたfeature/hogeブランチを作ります。SourceTreeでは[Git Flow > Start a New Feature」で新規featureブランチを作ることができます。仮にWebサイトへコンタクトフォームを追加する作業をするものとすると、feature/contact-formのような名前になると思います。

featureブランチを作ると自動的にそのブランチへ切り替わるので、開発を進めます。仮にcontact-formというディレクトリと、その中に適当なファイルを作り、完成したものとしておきます。開発が終了したらfeature/contact-formにコミットしブランチをdevelopブランチにマージします。マージしたらfeature/contact-formブランチは削除します。

SourceTreeでは、「Git Flow > Finish Current」でfeaturedevelopにマージし、削除までしてくれます。

リリースまではdevelop -> feature -> develop -> featureのサイクルを繰り返します。

releaseブランチ

developブランチ上でのプロジェクトの状態的にリリースができるようになったら、developブランチからreleaseブランチを分岐させます。

このブランチでは、リリースに係る作業、具体的には

  • テスト
  • ドキュメント作成
  • 軽微なバグ修正

を行います。

SourceTreeでは「Git Flow > Start a New Release」で、releaseブランチの作成を行います。リリースには特定のバージョンを指定し名付けます。

必要に応じてドキュメントの生成や更新、テストを行います。リリース前の仕上げ用ブランチのような役割になります。リリース準備が完了したら、このreleaseブランチはmasterdevelopブランチにマージします。masterにマージする際にはリリース用のタグを付けておきます。

SourceTreeでは「Git Flow > Finish Current」でこれらの作業を行います。

リリース作業を行うと、ローカルのワークスペースがmasterブランチに自動的に切り替わります。これをリモートのorigin/masterにpushします。これでmasterについているタグをベースにデプロイを行うことができます。

hotfixブランチ

リリース後にバグが見つかり、すぐに対処しなければならないケースではmasterからhotfix/hogeブランチを分岐します。

SourceTreeでは「Git Flow > Start a New Hotfix」でhotfixブランチを作ります。

これで自動的にワークスペースがhotfix/issue#001に切り替わるので、修正作業を行います。修正が完了したら、このブランチにコミットし、masterdevelopにマージします。

SourceTreeでは「Git Flow > Finish Current」でこの作業を行います。

これでリモートのdevelopmasterにpushしてデプロイを行います。