bzrでゲートキーパーを使ったワークフローのまとめ


全体概要

ゲートキーパーを使ったワークフローは、
・各作業者は中央ブランチから最新を取得し、変更を行う
ゲートキーパーは変更内容を確認後、中央ブランチに各作業者の変更を送る
というものである。
中央ブランチへ変更を送る権限を持つのは、ゲートキーパーのみである。

準備するブランチ

以下では、ゲートキーパー1人・作業者n人という構成で、一番簡単な環境を記述する。
環境によっては中央ブランチとやりとりするためのミラーブランチが必要だったりする。

中央ブランチ

svnで言うレポジトリ。いわゆるメインライン。
全ユーザから閲覧が可能で、ゲートキーパーのみ変更が可能。

各作業者のブランチ

各作業者ごとに存在し、作業者はこのブランチに最新内容を取得して修正を行う。
中央ブランチを親に持つブランチ。
ゲートキーパーはこのブランチから変更内容を取得するため、ゲートキーパーによる閲覧が可能であること。

ゲートキーパーの作業用ブランチ

ゲートキーパーが各作業者の変更内容を取り込み、中央ブランチに修正を送るためのブランチ。
中央ブランチを親に持つ。
このブランチは特に作業者から見える必要はない。

開発のワークフロー

前述した一番簡単な構成でのワークフローを記述する。

svn updateに該当する作業

ゲートキーパーの役割は変更内容を中央ブランチに送ることだけなので、この操作を行うのは各開発者のみである。

1.最新の状態を作業者のブランチに反映させる
 | 作業者のブランチ$ bzr merge 《中央部ランチ》 --pull
 | 作業者のブランチ$ 《衝突が発生した場合はそれを解消する》
 | 作業者のブランチ$ bzr commit -m "サーバ最新の取り込み"
 によって、中央ブランチの最新の状態を作業者のブランチに反映させる。
 この際、作業者側が変更を行っていない場合、マージをせずに中央部ランチの
 内容を単に取得するという動作をさせたいので「--pull」オプションをつける。

svn commitに該当する作業

各開発者は中央ブランチに書き込みを行う権限を持たないため、1以外の操作はゲートキーパーのみが行う。

1.作業者が自分の行った変更をコミットし、ゲートキーパーに知らせる
 | 機能ブランチ$ bzr commit
 によって、作業者のブランチに変更をコミットする。
 その後、口頭でもメールでも手段は問わないのでゲートキーパー
 修正が終ったことを伝える。
 ※ゲートキーパーに修正が終ったことを伝えない限りは
  何度コミットをしても中央ブランチに変更は取り込まれないため、
  作業上必要であれば自由にコミットを行って構わない。

2.作業者の変更をゲートキーパーの作業用ブランチに反映させる
 | ゲートキーパーの作業用ブランチ$ bzr merge 《変更を行った作業者のブランチ》
 によって、作業者の変更をゲートキーパーの作業用ブランチに取り込む。
 コミットは変更内容の確認後に行うため、この段階では行わない。
 ちなみに中央ブランチはゲートキーパー以外によっては変更されないため、
 作業前に中央ブランチの最新状態を取得する必要はない。

3.作業者の変更を確認する
 ゲートキーパーの作業用ブランチ上で、作業者の変更内容を確認する。
 変更内容が正しい場合は、
 | ゲートキーパーの作業用ブランチ$ bzr ci -m "変更:XXX 取り込み"
 によって変更を確定し、4の作業に移る。
 変更内容が正しくない場合は、
 | ゲートキーパーの作業用ブランチ$ bzr revert
 によって取り込んだ変更内容を破棄し、作業者に再度修正を行ってもらう。

4.作業者の変更を中央ブランチに反映させる
 | ゲートキーパーの作業用ブランチ$ bzr push 《中央部ランチ》
 によって、作業者の変更を中央ブランチに反映させる。
 中央ブランチはゲートキーパー以外によっては変更されないため、
 分岐の発生によるpushの失敗が起こることは無い。