うさぎ組

ソフトウェア開発、チームによる製品開発、アジャイル、ソフトウェアテスト

SourceTreeで楽々git-flow, hg-flow #augj

Atlassian Advent Calendar 2012 #augj

Atlassian Advent Calendar 2012 #augj on Zusaarのエントリになります。
前日はid:sue445さんのBitbucketとGithubをゆるく比較 #augj - くりにっきです。
明日はid:troter さんです。

git-flow, hg-flow がすごいらしい

楽にブランチ戦略を試せるし、うまいことやれるし、とりあえず始めて見る分にはgit-flow, hg-flowはいいと思うのです。
あれですね。WebアプリをとりあえずつくってみたくなったときにRailsでやってみる。的な。

ですが、なんだかんだでgit-flowやhg-flowになるとコマンドをうちます。素のgitやhgよりとても簡単になってはいますが。
問題はhgのほうです。
hgは既に史上最高のGUIクライアントであるTortoiseHgを擁しているわけで、hg-flowでコマンドラインに移行するのは「気楽さ」的にはあまり良さがないように思えます。

SourceTree

だがしかし。SourceTreeというGUIクライアントがありまして。現在はAtlassianさんが開発をしているこのツール。なんと、hg-flowとgit-flowをサポートしています。
しかもこのGUIクライアントはなかなか使い易いのです。
ということで、hg-flowの使い方を紹介しようと思います。

git-flow, hg-flowのブランチ戦略、ワークフローについて

概念図はこちらに翻訳付きでのっています。
見えないチカラ: A successful Git branching model を翻訳しました

インストールする必要のあるもの

MercurialとSourceTreeになります。
Mercurialはhomebrewでいれられますが、もしかしたらhg help日本語訳がでないかもしれません。
そのときはMercurialの公式サイトからバイナリをインストールしましょう。
SourceTreeはAppStoreからインストールしましょう。
hg-flowを別途インストールする必要はありません。

はじめよう

おおまかに次の流れになります。

  1. SourceTreeを起動してリポジトリをつくる。
  2. hg-flowをはじめる
  3. 新しいfeatureをつくる
  4. featureの開発が完了する
  5. リリースをはじめる
  6. リリースを完了する
  7. リリースしたものへの緊急対応をする


どうやってこれが流れているのかは先のA successful Git branching model を見てもらうとして、それぞれに対応するSourceTreeの操作を説明します。

SourceTreeを起動してリポジトリをつくる。


hg-flowをはじめる

hg-flowのコマンドは基本的にウィンドウの右上あたりにある「hg flow」ボタンをクリックすると、デフォルトで「次にこれしたいんですよねー」って感じで選んでくれてウィンドウが出現します。わかりやすいですね。



新しいfeatureをつくる

ある機能の開発をはじめるとします。ここではなんらかのITSのチケット番号でブランチを管理すると仮定して、0001とします。

featureの開発が完了する

いくつかコミットをして0001の開発がすんだので、このfeatureをとじます。



さらに0002の開発も終えた状況で次のようにしてみました。

リリースをはじめる

機能がほとんど固まって来たのでリリース段階にはいります。あとは基本的にバグフィックスのみになるという段階ですね。


本番用に必要なファイルを忘れていたので追加してみました。

リリースを完了する

テストやその他の準備が済んだのでこのバージョンでリリースします。

リリースしたものへの緊急対応をする

リリースバグがあり、これからつくろうとしている機能より優先的に対応が必要になりました。
hotfixをはじめます。







まとめ

コマンドでも次々とすすむのはかわらないのですが、フローをすすめるアクションのたびに「こんなブランチになる予定だよ」という表示がでるのはわかりやすいですね。
DVCSのブランチ戦略でもっとも重要なのは「リビジョングラフをいかに頭の中で描けるか」なので。
hg-flowとかgit-flowとか始めるの面倒そうだなぁと感じていた方はこれでちょっと触ってみるのもいいのではないでしょうか。