git flow使っている

仕事でバージョン管理は、git使っているんだけど、会社でgit flowというツールも一緒に使っている。
このgit flowというのは、ブランチを使った開発のサポートをしてくれるツール。

普通にgitを使っているとブランチが乱立してくる。(たぶん)
どれがマージしているとか重要な修正のマージ漏れが起きてコンフリクトが起きたり、ブランチの削除がめんどくなり、メンテナンスがとても大変になる。
そういう時はgit flowを使うとよいと思う。

何ができるかを書くと、バグがあった場合はhotfixコマンドを使う。ブランチの役目が終わるとmasterとdevelopにもマージしてくれる。
新機能を追加する時はfeatureコマンド使う。ブランチの役目が終わるとdevelopにだけマージしてくれる、のでマージ漏れがなくなる。
また、ブランチ名にコマンドのプレフィックスがつくので命名が適当でも後でだいたいわかる。
それと同時にタグも作ってくれるので楽。(他にも良いところがあるんだろうけどわかんない。)

インストール

インストールは、aptとかmacportで簡単に入れることができる。
Macportsを使っているなら次のコマンドだけでいい。

$ sudo port install git-flow

次はセットアップ

git flowのセットアップはプロジェクト毎にする必要がある。
gitリポジトリの作成もまだであれば、git flow initをすると、リポジトリも作ってくれるし、開発(develop)ブランチも一緒に作ってくれる。
initコマンドを実行したらEnterKeyを押しているだけでいい。そうするとデフォルトの設定になる。

$ git flow init
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master] 
Branch name for "next release" development: [develop] 

How to name your supporting branch prefixes?
Feature branches? [feature/] 
Release branches? [release/] 
Hotfix branches? [hotfix/] 
Support branches? [support/] 
Version tag prefix? []

使ってみる

本番ブランチ(master)にバグがあった場合。hotfixコマンドを使う。
実行するとmasterから派生したhotfixブランチを作ってくれるはず。

$ git flow hotfix start hoge 
Switched to a new branch 'hotfix/hoge'

Summary of actions:
- A new branch 'hotfix/hoge' was created, based on 'master'
- You are now on branch 'hotfix/hoge'

Follow-up actions:
- Bump the version number now!
- Start committing your hot fixes
- When done, run:

     git flow hotfix finish 'hoge'

これでブランチがhogeになる。
このブランチで問題のバグを修正して、このブランチを終了する時は、次のコマンドを実行する。

$ git flow hotfix finish 'hoge'

するとタグを入力してくれとエディタが立ち上がるのでタグの名前を適当に入力する。

                                                                                                                                                            
#
# Write a tag message
# Lines starting with '#' will be ignored.
#

みたいな感じでhotfixであれば、masterとdevlopにマージしてくれてタグまで作ってくれる。
releaseコマンドもだいたい同じ感じ。featureコマンドはブランチをfinishするとdevelopだけにマージされる。コマンドによって派生元やマージされるブランチが違う。



個人だとステージング用ブランチもない場合が多いので、masterに直接コミットしているから使う出番はないけど、ブランチを使ってきちっと開発するなら必須だと思う。