Gitを使った分散開発管理15 – git-flowを使ってみる
git-flowを使ってブランチの管理
いままでGitについてのさまざまな機能をご紹介してきました。 まだまだほかにも機能があり自由なスタイルでソース管理できるGitですが、自由すぎてどうしようか迷うかもしれません。 今回ご紹介するものは、実際に開発を進めていく中での運用を補助するプラグイン、 git-flowについてご紹介します。
git-flowとは?
「A successful Git branching model」※1 と呼ばれるGitのブランチモデルでの運用を補助するプラグインです。 このモデルにそったgit-flowのブランチモデルは下記のような特徴があります。
- 中央リポジトリとみなす、originを用意
- originはmasterとdevelopのブランチを持つ
- masterはリリース用のブランチで、リリースしたらタグ付けする。(SVNでいう trunkとtag)
- developは開発用ブランチ。リリース準備ができたらmasterへマージする。リリース前はこのブランチが最新
originをマスターとみなすことで管理が容易になります。 このような運用をすることで、SVNと同じような中央型の利点を得ることができます。
各開発者はmasterとdevelopのブランチのほか、
- フィーチャーブランチ
- リリースブランチ
- ホットフィックスブランチ
のブランチを使用します。 フィーチャーブランチは機能の追加のためのブランチで、developから分岐/マージします。 リリースブランチはリリースの準備のためのブランチです。 機能追加、バグ修正と分離することで、リリース時に含めるコードを綺麗な状態に保つことが可能です。 ホットフィックスブランチはリリース後の緊急バグ修正などの、現在のバージョンに対する変更用です。 このブランチはmasterから分岐/マージし、タグをつけ、developにマージするといった使用方法です。 なお、これらのサポートブランチは最後には削除されます。
インストール
インストールはhomebrewで可能なので簡単です。
$ brew install git-flow
git-flowを使ってみる
では基本的な流れをやってみましょう。
git-flow初期化
ディレクトリを作成し、git flow initコマンドを実行します。 対話式で各種ブランチの名前などを変更することができます。ここは全てデフォルトにします。
%mkdir git-flow-sample %cd git-flow-sample/ %git flow init Initialized empty Git repository in /Users/git-flow-sample/.git/ 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? []
github上のoriginを登録
Github上で適当なプロジェクトを作成し、みなし中央リポジトリとして登録しておきましょう。
% git remote add origin git@github.com:<username>/<作成したリポジトリ> % git push -u origin master
機能追加をしてみる
まずはfeatureブランチを開始します。git flow feature start <機能名>とします。
% git flow feature start helloworld Switched to a new branch 'feature/helloworld' Summary of actions: - A new branch 'feature/helloworld' was created, based on 'develop' - You are now on branch 'feature/helloworld' Now, start committing on your feature. When done, use: git flow feature finish helloworld
git branchで確認します。feature/helloworldブランチが作成され、切り替わっています。 また、git flow featureとすると、現在のfeatureブランチ一覧をみることができます。
%git branch develop * feature/helloworld master %git flow feature * helloworld
では適当なファイルを追加しましょう。helloworldを出力するcljファイルを追加し、コミットします。
%vi hello.clj %git add hello.clj %git commit -m "add hello.clj" [feature/helloworld ef21595] add hello.clj 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 hello.clj
機能追加コミットができたので、ブランチを終了します。 git flow feature finish <機能名>とします。
%git flow feature finish helloworld Switched to branch 'develop' Updating a24a0a1..ef21595 Fast-forward hello.clj | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 hello.clj Deleted branch feature/helloworld (was ef21595). Summary of actions: - The feature branch 'feature/helloworld' was merged into 'develop' - Feature branch 'feature/helloworld' has been removed - You are now on branch 'develop'
featureブランチが削除され、developブランチに切り替わりました。 logを確認してみると、featureブランチでコミットした内容がdevelopブランチにマージされています。
%git branch * develop master %git log commit ef215953889637995b1298b182cd4249cd955289 Author: syuta <nakamura.shuta@gmail.com> Date: Sat Jan 7 10:22:58 2012 +0900 add hello.clj ・・・・
では、みなし中央リポジトリにpushしましょう。
%git push origin develop Counting objects: 4, done. Writing objects: 100% (3/3), 265 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To git@github.com:<user>/git-flow-sample.git * [new branch] develop -> develop
Githubで確認してみてください。developブランチが新たに作成され、hello.cljファイルが追加されています。
まとめ
今回はgit-flowのfeature機能を使用してみました。 基本的にリリース機能もホットフィックス機能も似たような流れで使用します。 これを使用すればチームで開発におけるGit運用が便利になりそうですね。
参考サイトなど
- A successful Git branching model ※1 http://nvie.com/posts/a-successful-git-branching-model/
- git-flow によるブランチの管理http://www.oreilly.co.jp/community/blog/2011/11/branch-model-with-git-flow.html