Git-flowをざっと整理してみた
こんにちは、ジョン・ヒョンジェです!
今回はGit-flowについて話したいと思います。
Git-flowとは
Git-flowは簡単に言うと、Gitのブランチ機能を利用する開発戦略の一つです。Git-flowを採択して、もっと効率的に開発するソースコードを管理することができます。そして、共通のルールがあるので、コラボレーションをしながら発生する問題を最小限にすることができます。最近、多くのプロジェクトでGit-flow戦略が採択されています。(全てのプロジェクトで良いわけではありません)
以下では、Git-flowで使われるブランチの説明と活用する方法について説明します。
Git-flowのブランチ
Git-flowを説明する図です。ここで一番中心になるメインブランチはmaster
ブランチとdevelop
ブランチです。そして、メインブランチをサポートするブランチとしてfeature
ブランチ、release
ブランチ、hotfix
ブランチがあります。
- master
- ユーザにプロダクトとしてリリースするソースコードを管理するブランチ
- タグでバージョンを管理
- 開発作業は行わない
- develop
- 実際に開発作業を行うブランチ
- バグ修正
- 新しい機能はfeatureブランチを作成して開発
- feature
- developブランチを基盤に作成されるブランチ
- 新しい機能を開発
- 開発が終わったらdevelopブランチにマージ
- release
- developブランチを基盤に作成されるブランチ
- リリース直前にバグ修正などの微調整、つまりQAを行うブランチ
- QAを完了したら、master, developブランチにマージ
- hotfix
- リリースされたバージョンで発生したバグを速やかに修正するブランチ
- 修正後すぐmaster, developブランチにマージ
このようにGit-flowではブランチを作成、修正、マージする過程で各ブランチの目的を明確にしながら、ソースコードを管理することができます。
では、コマンドを実際に叩いてみましょう
Git-flowを実際に触ってみましょう
ここではGitとGit-flowはインストールされているのを想定して進みます。
Git-flow初期化
まず、Git-flowを初期化します。
git flow init -d
-d
オプションはディフォルトのブランチ名が自動で付けられるオプションです。
git branch
コマンドを使ってブランチの情報を確認します。
git branch * develop master
このようにdevelopブランチとmasterブランチが作成されていて、developブランチにcheckoutされています。
featureブランチで機能開発
では、新しい機能を開発するためのfeatureブランチをstart
コマンドを使って作成しましょう。
git flow feature start <feature name>
git branch
コマンドを実行して確認すると、
git branch develop * feature/<feature name> master
feature/<feature name>のブランチが作成され、自動にcheckoutされています。<feature name>は開発する機能がわかるように設定しましょう。
では、このブランチで新しい機能の開発をします。今回はテキストファイルを一つ作ることで代替します。
touch gf-handson.txt
機能開発が完了したのでfinish
コマンドでdevelopブランチにマージします。
git flow feature finish <feature name>
このコマンドを実行することで、以下の作業が自動に行われます。
- developブランチにcheckout
- featureブランチをマージ
- featureブランチの削除
もし、GitHubなどのプラットフォームを使って他の開発者とコラボレーションをしている場合はpublish
コマンドを使ってリポジトリにfeatureブランチをpushすることもできます
git flow feature publish <feature name>
逆にリポジトリからfeatureブランチを持ってくる場合はpull
コマンドを使います。
git flow feature pull origin <feature name>
releaseブランチでリリースを準備
リリースのための全ての機能をdevelopブランチにマージしたら、releaseブランチでQAを行います。
releaseブランチを作成しましょう。
git flow release start <version>
また、git branch
で確認すると
git branch develop master * release/<version>
このようにrelease/<version>のブランチが作成され、自動にcheckoutされています。このブランチでQA作業を行います。
QA作業も終わったらリリースする準備は完了です。では、finish
コマンドでmaster, developブランチにマージします。
git flow release finish <version>
このコマンドを実行することで、以下の作業が自動に行われます。
- releaseブランチをmasterブランチにマージ
- releaseブランチをdevelopブランチにマージ
- releaseブランチを削除
featureブランチと同じように他の開発者とコラボレーションしている場合はpublish
コマンドでリポジトリにpushします。
git flow release publish <version>
リポジトリからreleasaeブランチを持ってくる場合はtrack
コマンドを使います。pull
ではないので、気をつけましょう。
git flow release track <version>
リリース
ここまですると、masterブランチは新しいリリースバージョンのソースコードを持っています。
最後にmasterブランチをタグと一緒にリポジトリにpushしてリリースします。
git push --tags
リリース後のバグ対応
リリースされたバージョンに緊急のバグが発生するとhotfixブランチで対応します。
まず、hotfixブランチを作成します。
git flow hotfix start <version>
作成したhotfixブランチで緊急のバグを修正した後、finish
コマンドを使ってmasterブランチにマージします。
git flow hotfix finish <version>
このコマンドを実行することで、以下の作業が自動に行われます。
- hotfixブランチをmasterブランチにマージ
- hotfixブランチをdevelopブランチにマージ
- hotfixブランチを削除
このようにGit-flowモデルを使ってプロジェクトの開発をもっと効率的にすることができます。
最後に
今までGit-flowの概念と開発流れについて説明しました。
Git-flowで開発をしながら一点注意することは各ブランチのソースコードのコンフリクトが発生しないようにすることです。例えば、developブランチから作成されたfeatureブランチでは常にdevelopの内容を持っている必要があります。そして、developブランチではfeatureブランチをマージする前にはfeatureブランチの内容を持っていない状態を維持する必要があります。
そして、GitHubなどのプラットフォームを使ってチーム内や他の開発者とコラボレーションをする場合はpushとpullをしばしばして置いて、コードのコンフリクトを防止しましょう!!
では、ブログは以上です!ありがとうございます。
(以下のリンクはGit-flowを誕生させたVincent Driessen氏の伝説のブログです)