mercurialでチケット駆動開発
本格的にmercurialを使い始めて数ヶ月、色々ノウハウがたまったのでまとめてみる。
想定する状況
リポジトリ配置
ブランチ運用
- default
- リリースブランチ。常にリリース可能な状態である必要がある。
- confirm
- 確認ブランチ。確認環境は常にこのブランチで稼動している。
- ticketXXX
- 各チケットごとのブランチ。defaultブランチをベースとする
開発の進め方
1. 自分担当のチケットで、着手するものに関してticketXXXでブランチを切り、チケットのステータスをassignedとする
hg up default hg branch ticketXXX hg ci -m "start"
2. ticketXXXブランチ上で開発する。
-
- 途中成果は中央@個人用リポジトリにpush
-
- 既に着手されたチケットの担当者変更の場合は、元担当者の中央個人用リポジトリからチケットのブランチをpullしてくる。
hg pull -r ticketYYY daresore
-
- チケット開発中にリリースブランチの更新があった場合はすぐにrebase作業を行う。
hg up ticketXXX hg merge default hg ci -m "rebased"
#hg rebaseなどという機能もあるらしいが微妙とのことなのでmergeする。→http://d.hatena.ne.jp/monjudoh/20090907/1252347458
3. 開発が完了したらconfirmにmergeして中央にpushし、チケットのステータスをresolvedにする。
hg up confirm hg pull central hg merge ticketXXX hg ci hg push -r confirm central
#-r confirmは忘れずに。チケットごとのブランチを中央に上げるとカオスになって、そこからcloneした人の頭がおかしくなって死ぬ
4. 確認が通ったらチケットをverifiedにして各チケットブランチ->リリースブランチにマージする
hg up default hg pull central hg merge ticketXXX hg ci hg push -r default
#間違ってもconfirm->defaultというマージをしてはいけない。confirmには未確認の修正も混ざり得るので。
5. リリース可能状態。
やってみての感想
わりとイケテル
TODO
- defaultの前にRCブランチが必要かも
*1:なくもない