hgflow
GitにはA successful Git branching modelと言われるブランチ運用フローが知られています。
内容の詳細はこちら
原文
A successful Git branching model » nvie.com
翻訳
見えないチカラ: A successful Git branching model を翻訳しました
でこのフローを補助するツールとしてgit-flowというのがあります。
GitHub - nvie/gitflow: Git extensions to provide high-level repository operations for Vincent Driessen's branching model.
git-flowの使い方はこちらが詳しいです。
A successful Git branching model を補助する git-flow を使ってみた - Twisted Mind
これのMercurial版としてhgflowなるものもあります。
yinwm / hgflow / wiki / Home — Bitbucket
なので、上記のgit-flowの使用例にあわせてhgflowも試してみました。
hg flow initで方針を決めます。ここではデフォルトのままにしておきます。なおgit flow initだとgit initも実行されますが、hgflowはそうではないのでhg initを先に実行しておきます。
$ mkdir snowflake $ cd snowflake $ hg init $ hg flow init Branch name for production release : [default] Branch name for "next release" development : [develop] How to name your supporting branch prefixes? Feature branches? [feature/] Release branches? [release/] Hotfix branches? [hotfix/] Version tag prefix? [] 作業領域をブランチ default に設定 変更なし 作業領域をブランチ develop に設定
この時点でブランチはこうなります。defaultブランチがgitのmasterに相当します。
$ hg branches develop 1:a2a56cf63a7f default 0:b8b8a5cf5037 (非アクティブ)
適当にファイルを作ってコミットしてみます
$ mkdir src $ touch src/snowflake.erl $ hg add src/snowflake.erl $ hg ci -m "add snowflake.erl"
新しい機能を実装するので feature ブランチを切ります。
spam というブランチを作ります。
$ hg flow feature start spam ファイル状態: 更新数 0、 マージ数 0、 削除数 0、 衝突未解決数 0 作業領域をブランチ feature/spam に設定 $ hg branches feature/spam 3:08f0cbe9b0ab develop 2:bb31437ac6cb (非アクティブ) default 0:b8b8a5cf5037 (非アクティブ)
ブランチが作成されたので、コードを編集してコミットします。
$ vim src/snowflake.erl $ hg di diff -r 08f0cbe9b0ab src/snowflake.erl --- a/src/snowflake.erl Tue Mar 15 21:13:03 2011 +0900 +++ b/src/snowflake.erl Tue Mar 15 21:13:45 2011 +0900 @@ -0,0 +1,1 @@ +-module(snowflake) $ hg ci -m "modify"
コミット後、この feature/spam ブランチを終了します。
$ hg flow feature finish spam ファイル状態: 更新数 0、 マージ数 0、 削除数 0、 衝突未解決数 0 ファイル状態: 更新数 1、 マージ数 0、 削除数 0、 衝突未解決数 0 ファイル状態: 更新数 1、 マージ数 0、 削除数 0、 衝突未解決数 0 (マージ結果の commit を忘れずに) $ hg glog @ チェンジセット: 6:7273f9f37e24 |\ ブランチ: develop | | タグ: tip | | 親: 2:bb31437ac6cb | | 親: 5:5d7b6105ce8b | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:14:37 2011 +0900 | | 要約: hg flow, merge release `spam` to develop branch `develop` | | | o チェンジセット: 5:5d7b6105ce8b | | ブランチ: feature/spam | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:14:37 2011 +0900 | | 要約: hg flow, close feature spam | | | o チェンジセット: 4:e74af3a7186e | | ブランチ: feature/spam | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:14:26 2011 +0900 | | 要約: modify | | | o チェンジセット: 3:08f0cbe9b0ab |/ ブランチ: feature/spam | ユーザ: wyukawa | 日付: Tue Mar 15 21:13:03 2011 +0900 | 要約: hg flow, add feature branch `feature/spam`. | o チェンジセット: 2:bb31437ac6cb | ブランチ: develop | ユーザ: wyukawa | 日付: Tue Mar 15 21:12:47 2011 +0900 | 要約: add snowflake.erl | o チェンジセット: 1:a2a56cf63a7f | ブランチ: develop | ユーザ: wyukawa | 日付: Tue Mar 15 21:11:27 2011 +0900 | 要約: hg flow init, add branch develop | o チェンジセット: 0:b8b8a5cf5037 ユーザ: wyukawa 日付: Tue Mar 15 21:11:27 2011 +0900 要約: hg flow init, add .hgflow file
develop にマージされました。
feature/spamブランチはクローズされています。Mercurialの名前付きブランチは削除できないですがクローズはできます。
$ hg branches develop 6:7273f9f37e24 default 0:b8b8a5cf5037 (非アクティブ) $ hg branches -c develop 6:7273f9f37e24 feature/spam 5:5d7b6105ce8b (閉鎖済み) default 0:b8b8a5cf5037 (非アクティブ)
ではリリースブランチを作りましょう。リリース後のバージョンは 1.0 とします。
$ hg flow release start 1.0 ファイル状態: 更新数 0、 マージ数 0、 削除数 0、 衝突未解決数 0 作業領域をブランチ release/1.0 に設定
リリースブランチrelease/1.0が作成されました。
ここで、リリース用に少し変更します。
ebin/snowflake.app を追加してコミットします。
$ mkdir ebin $ vim ebin/snowflake.app $ hg add ebin/snowflake.app $ hg ci -m "add snowflake.app"
作業が終わったのでリリースブランチrelease/1.0を終了します。
$ hg flow release finish 1.0 ファイル状態: 更新数 0、 マージ数 0、 削除数 0、 衝突未解決数 0 ファイル状態: 更新数 0、 マージ数 0、 削除数 3、 衝突未解決数 0 close target_branch ファイル状態: 更新数 3、 マージ数 0、 削除数 0、 衝突未解決数 0 (マージ結果の commit を忘れずに) merge source_tag_name into publish branch merge target_branch into develop branch ファイル状態: 更新数 0、 マージ数 0、 削除数 2、 衝突未解決数 0 ファイル状態: 更新数 2、 マージ数 0、 削除数 0、 衝突未解決数 0 (マージ結果の commit を忘れずに) $ hg tags tip 12:100afc538743 1.0 8:ce7e4321efb3 $ hg branches -c develop 12:100afc538743 default 11:adf3d8d62021 release/1.0 10:856058d87e68 (閉鎖済み) feature/spam 5:5d7b6105ce8b (閉鎖済み) $ hg glog @ チェンジセット: 12:100afc538743 |\ ブランチ: develop | | タグ: tip | | 親: 6:7273f9f37e24 | | 親: 10:856058d87e68 | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:16:54 2011 +0900 | | 要約: hg flow, merge release `1.0` to develop branch `develop` | | | | o チェンジセット: 11:adf3d8d62021 | |/| 親: 0:b8b8a5cf5037 | | | 親: 10:856058d87e68 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:16:54 2011 +0900 | | | 要約: hg flow, merge release `1.0` to publish branch `default` | | | | o | チェンジセット: 10:856058d87e68 | | | ブランチ: release/1.0 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:16:54 2011 +0900 | | | 要約: hg flow, close release release/1.0 | | | | o | チェンジセット: 9:081c2775c0c3 | | | ブランチ: release/1.0 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:16:54 2011 +0900 | | | 要約: Added tag 1.0 for changeset ce7e4321efb3 | | | | o | チェンジセット: 8:ce7e4321efb3 | | | ブランチ: release/1.0 | | | タグ: 1.0 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:16:41 2011 +0900 | | | 要約: add snowflake.app | | | | o | チェンジセット: 7:57b0363a6cf2 |/ / ブランチ: release/1.0 | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:15:28 2011 +0900 | | 要約: hg flow, add develop branch `release/1.0`. | | o | チェンジセット: 6:7273f9f37e24 |\ \ ブランチ: develop | | | 親: 2:bb31437ac6cb | | | 親: 5:5d7b6105ce8b | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:14:37 2011 +0900 | | | 要約: hg flow, merge release `spam` to develop branch `develop` | | | | o | チェンジセット: 5:5d7b6105ce8b | | | ブランチ: feature/spam | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:14:37 2011 +0900 | | | 要約: hg flow, close feature spam | | | | o | チェンジセット: 4:e74af3a7186e | | | ブランチ: feature/spam | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:14:26 2011 +0900 | | | 要約: modify | | | | o | チェンジセット: 3:08f0cbe9b0ab |/ / ブランチ: feature/spam | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:13:03 2011 +0900 | | 要約: hg flow, add feature branch `feature/spam`. | | o | チェンジセット: 2:bb31437ac6cb | | ブランチ: develop | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:12:47 2011 +0900 | | 要約: add snowflake.erl | | o | チェンジセット: 1:a2a56cf63a7f |/ ブランチ: develop | ユーザ: wyukawa | 日付: Tue Mar 15 21:11:27 2011 +0900 | 要約: hg flow init, add branch develop | o チェンジセット: 0:b8b8a5cf5037 ユーザ: wyukawa 日付: Tue Mar 15 21:11:27 2011 +0900 要約: hg flow init, add .hgflow file
default と develop にrelease/1.0ブランチの変更がマージされました。
さらに 1.0 のタグが打たれて、現在のブランチが develop に変更されます。
さて最後に hotfix を当ててみます。
バグを修正した後のバージョン番号は 1.1 にしましょう。
$ hg flow hotfix start 1.1 ファイル状態: 更新数 0、 マージ数 0、 削除数 0、 衝突未解決数 0 作業領域をブランチ hotfix/1.1 に設定
src/snowflake.erl を編集してコミットします。
$ vim src/snowflake.erl $ hg ci -m "add author"
hotfixブランチを終了します。
$ hg flow hotfix finish 1.1 ファイル状態: 更新数 0、 マージ数 0、 削除数 0、 衝突未解決数 0 ファイル状態: 更新数 2、 マージ数 0、 削除数 0、 衝突未解決数 0 close target_branch ファイル状態: 更新数 2、 マージ数 0、 削除数 0、 衝突未解決数 0 (マージ結果の commit を忘れずに) merge source_tag_name into publish branch merge target_branch into develop branch ファイル状態: 更新数 2、 マージ数 0、 削除数 0、 衝突未解決数 0 ファイル状態: 更新数 2、 マージ数 0、 削除数 0、 衝突未解決数 0 (マージ結果の commit を忘れずに) $ hg branches -c develop 18:6210035f6523 default 17:c70d73961f11 hotfix/1.1 16:5a6e13e20b0d (閉鎖済み) release/1.0 10:856058d87e68 (閉鎖済み) feature/spam 5:5d7b6105ce8b (閉鎖済み) $ hg tags tip 18:6210035f6523 1.1 14:db5c37e8c232 1.0 8:ce7e4321efb3 $ hg glog @ チェンジセット: 18:6210035f6523 |\ ブランチ: develop | | タグ: tip | | 親: 12:100afc538743 | | 親: 16:5a6e13e20b0d | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:19:16 2011 +0900 | | 要約: hg flow, merge release `1.1` to develop branch `develop` | | | | o チェンジセット: 17:c70d73961f11 | |/| 親: 11:adf3d8d62021 | | | 親: 16:5a6e13e20b0d | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:19:16 2011 +0900 | | | 要約: hg flow, merge release `1.1` to publish branch `default` | | | | o | チェンジセット: 16:5a6e13e20b0d | | | ブランチ: hotfix/1.1 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:19:16 2011 +0900 | | | 要約: hg flow, close release hotfix/1.1 | | | | o | チェンジセット: 15:b9a54c79aa8d | | | ブランチ: hotfix/1.1 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:19:16 2011 +0900 | | | 要約: Added tag 1.1 for changeset db5c37e8c232 | | | | o | チェンジセット: 14:db5c37e8c232 | | | ブランチ: hotfix/1.1 | | | タグ: 1.1 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:19:04 2011 +0900 | | | 要約: add author | | | | o | チェンジセット: 13:14b985eef242 |/ / ブランチ: hotfix/1.1 | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:18:24 2011 +0900 | | 要約: hg flow, add default branch `hotfix/1.1`. | | o | チェンジセット: 12:100afc538743 |\ \ ブランチ: develop | | | 親: 6:7273f9f37e24 | | | 親: 10:856058d87e68 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:16:54 2011 +0900 | | | 要約: hg flow, merge release `1.0` to develop branch `develop` | | | | | o チェンジセット: 11:adf3d8d62021 | |/| 親: 0:b8b8a5cf5037 | | | 親: 10:856058d87e68 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:16:54 2011 +0900 | | | 要約: hg flow, merge release `1.0` to publish branch `default` | | | | o | チェンジセット: 10:856058d87e68 | | | ブランチ: release/1.0 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:16:54 2011 +0900 | | | 要約: hg flow, close release release/1.0 | | | | o | チェンジセット: 9:081c2775c0c3 | | | ブランチ: release/1.0 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:16:54 2011 +0900 | | | 要約: Added tag 1.0 for changeset ce7e4321efb3 | | | | o | チェンジセット: 8:ce7e4321efb3 | | | ブランチ: release/1.0 | | | タグ: 1.0 | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:16:41 2011 +0900 | | | 要約: add snowflake.app | | | | o | チェンジセット: 7:57b0363a6cf2 |/ / ブランチ: release/1.0 | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:15:28 2011 +0900 | | 要約: hg flow, add develop branch `release/1.0`. | | o | チェンジセット: 6:7273f9f37e24 |\ \ ブランチ: develop | | | 親: 2:bb31437ac6cb | | | 親: 5:5d7b6105ce8b | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:14:37 2011 +0900 | | | 要約: hg flow, merge release `spam` to develop branch `develop` | | | | o | チェンジセット: 5:5d7b6105ce8b | | | ブランチ: feature/spam | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:14:37 2011 +0900 | | | 要約: hg flow, close feature spam | | | | o | チェンジセット: 4:e74af3a7186e | | | ブランチ: feature/spam | | | ユーザ: wyukawa | | | 日付: Tue Mar 15 21:14:26 2011 +0900 | | | 要約: modify | | | | o | チェンジセット: 3:08f0cbe9b0ab |/ / ブランチ: feature/spam | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:13:03 2011 +0900 | | 要約: hg flow, add feature branch `feature/spam`. | | o | チェンジセット: 2:bb31437ac6cb | | ブランチ: develop | | ユーザ: wyukawa | | 日付: Tue Mar 15 21:12:47 2011 +0900 | | 要約: add snowflake.erl | | o | チェンジセット: 1:a2a56cf63a7f |/ ブランチ: develop | ユーザ: wyukawa | 日付: Tue Mar 15 21:11:27 2011 +0900 | 要約: hg flow init, add branch develop | o チェンジセット: 0:b8b8a5cf5037 ユーザ: wyukawa 日付: Tue Mar 15 21:11:27 2011 +0900 要約: hg flow init, add .hgflow file
新しいタグ1.1が作られdevelopにマージされています。が、しかし、hotfixブランチがdevelopから分岐してます。defaultから分岐するのが正しいのでは。。。hgflow-v0.3.pyの190行目の'develop'というハードコードが気になりますw
いじょ