複数のアジャイルチームでのバージョン管理

InfoQの以下の記事はとても興味深い。

アジャイルチームごとに、専用の開発用ブランチを持ち、オーナーとポリシーを設定する。このチームごとのブランチのポリシーは「単体テストが完了していること」。そして、メインラインのポリシーは「いつでもリリース可能であること」。

このポリシーを実現しているのが、毎日のメインラインからチームごとのブランチへのマージ(キャッチアップ)とストーリーが完了した場合のみメインラインにパブリッシュするというシンプルなルールだ。各チームごとのブランチのオーナーは、ポリシーとルールが守られていることに責任を負う。

リリースブランチはパッチが必要となった場合のみ作成されて、不具合はこのリリース(メンテナンス)ブランチで対処される。フィーチャブランチはメインラインからブランチ分けされるのではなく、チームごとのブランチからブランチ分けする。

メインラインとリリースブランチをリリース用コードラインとし、各チームごとのブランチを作業用コードラインとすることで、「いつでもリリース可能」を実現するといったアイデアが素晴らしい。

ストーリー完了の定義=リリース可能、すなわちメインライン = DONEブランチ という考え方にもシビれるね。メインラインのコミットログとコミット回数を見れば、スプリント(イテレーション)でどのストーリーが実装されたのかがわかるなんて、とてもCoolだし。そしてアジャイルなチームであるなら(毎日マージしなければいけないということよりも、いつでもリリース可能にするためにポリシーを壊さないことに重きをおけるなら)、間違いなくこのやり方はとてもうまく機能するだろう。

via:InfoQ: Version Control for Multiple Agile Teams