SubversionからMercurialに移行しようとしていますが、いくつかの問題が発生しています。最初に少し背景を説明します。
必要なワークフロー:
1つのリポジトリ内に、安定したブランチとデフォルトのブランチの2つだけを配置したいと考えています。
- 開発はデフォルトのブランチで行われます。
- バグ修正は安定したブランチにコミットされ、デフォルトにマージされます。
- すべてのSprintの後に、デフォルトのブランチにタグを付けます。
- 最終的には、新しいバージョンをリリースできます。このバージョンでは、コード(おそらく最新のSprintタグ)をデフォルトから安定版(
update stable
、merge Sprint_xyz
)に移行し、ブランチ(tag Release_xyz
)にタグを付けてリリースします。
また、CI用のJenkinsビルドサーバーで次のジョブが必要です。
- End-of-Sprintジョブ:このジョブは、デフォルトにSprint_xyzのようなタグを付ける必要があります
- リリースジョブ:このジョブは、最新の「Sprint」タグの変更を安定版ブランチに渡し、Release_6.0.0などで安定版にタグを付けてリリースをビルドする必要があります。
もう少し背景:
Mercurialは私たちにとって新しいものですが、私たちが見てきたことからすると、これは正気のアプローチのように思えます。開発ワークフローを可能な限り単純にするために、名前付きブランチとクローンブランチよりもリリースをマークするタグを選択しました(単一のマージステップ、単一のチェックアウト、追跡するブランチは2つだけです...)。
私たちはスクラムを使用し、スプリントごとにバージョンをリリースする可能性があります(必ずしもそうとは限りません)。これは、安定したブランチの一部になり、「出荷可能な」リリースになる可能性があります。
私たちが直面している問題(そして私たちがこれに正しい方法でアプローチしているかどうか疑問に思っている...)は次のとおりです。
デフォルトのブランチ(次の貧乏人のグラフの「d」)で作業します。
d -o-o-o-o-
スプリントを終了し、デフォルトで「Sprint1」のタグを付けるEnd-of-Sprintジョブ(Jenkinsを使用)をトリガーします。
d -o-o-o-o-o-
|
Sprint 1
Sprint 1をリリースするには、安定したブランチ('s')に更新し、Sprint1タグのリビジョンからの変更をマージしてコミットします。
Sprint 1
|
d -o-o-o-o-o-
\
s -o-o-o-o-o-o-
安定したタグを付けてコミットします。
Sprint 1
|
d -o-o-o-o-o-
\
s -o-o-o-o-o-o-o-
|
Release 1
デフォルトに更新し、stableをマージします。これは、defaultがstable、commit、pushのスーパーセットのままである必要があるためです。
Sprint 1
|
d -o-o-o-o-o-o-o-o-o-
\ /
s -o-o-o-o-o-o-o-
|
Release 1
問題は、.hgtagsを「s」から「d」にマージするときに、Mercurialで競合が発生し、リリースジョブの完了が妨げられることです。結果の.hgtagsには、関連する両方のタグからの情報が含まれている必要があります。私たちはこれに対する解決策を探しており、おそらくいくつかのフックやスクリプトを使用してこれらのタイプのマージの競合を自動化できますが、それ以外の場合は異常ではないように見えるワークフローをサポートするための不要でエラーが発生しやすいハックのようです。
- これらの問題に遭遇する原因となる、私たちのアプローチに本質的に何か問題がありますか?
- そうでない場合、スクリプト/フックのアプローチに依存することなく、これらの問題を解決するための最良の方法は何ですか?
- 私たちのワークフローをサポートするより良いアプローチはありますか?