Mercurialのリポジトリ概念を理解する為に集中型のおさらいをする。
まずは、Subversion等の集中管理型?のおさらい。
trunk,branch,tagの役割
trunk | 常に最新機能の開発に使うリポジトリ。このリポジトリから直接リリースすることはしない |
branch | リリース用のパッケージ。trunkからA.B.Xと採番して分岐を作り、リリースパッケージ開発&バグFIX用のリポジトリとする |
tag | branchで実リリースを行ったときのリビジョンのスナップショット |
リリースの手順とtrunk,branch,tagの分岐の関係
リリースするときに、最新のtrunkから「X.Y.Z」というリリース用のブランチを作成する。
そのブランチを安定させた時点で「X.Y.0」とタグをつけて本番リリースする。
branchを作成するときの注意点
- 必ずtrunkから分岐させる
メインラインとなるtrunkは最新開発用ブランチという役割を保つために、分岐は必ずtrunkから行う。
branchから分岐させて孫のbranch、ひ孫のbranchをさせてしまうと、trunkへのマージ作業が複雑化し、デグレを起こしやすい要因になりかねない。
- trunkは正しくビルドできる状態で保つ
全ての開発者は、メインラインに対して作業を行う。コミット時にコンパイルエラーが起きないようにすること。
- branchの変更は、即効でメインライン(trunk)に反映させる
branchに対するメンテナンス期間が長いほど、trunkへのマージ作業が増大し、マージ作業が困難となる。ブランチを作成して分岐したばあい、その変更内容はすばやくメインラインに戻しましょう。
だったと思います。
でMercurialの場合は、分散型なので、だいぶ違う。。。
http://www.selenic.com/mercurial/wiki/index.cgi/JapaneseFAQ
の用語以降の説明に記載があるので、しっかり理解してから再度。。。
http://www.lares.dti.ne.jp/~foozy/fujiguruma/scm/mercurial-distrib.html
の構成例を見るとまた認識が変わってしまったり。。。
ダメな自分だ。。。orz。。。とりあえず、今日は寝ます。