全体概要
ゲートキーパーを使ったワークフローは、
・各作業者は中央ブランチから最新を取得し、変更を行う
・ゲートキーパーは変更内容を確認後、中央ブランチに各作業者の変更を送る
というものである。
中央ブランチへ変更を送る権限を持つのは、ゲートキーパーのみである。
準備するブランチ
以下では、ゲートキーパー1人・作業者n人という構成で、一番簡単な環境を記述する。
環境によっては中央ブランチとやりとりするためのミラーブランチが必要だったりする。
開発のワークフロー
前述した一番簡単な構成でのワークフローを記述する。
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の失敗が起こることは無い。