あなたはプロモーションモデルについて話している -PERFORCEの論文はそれに関する問題を強調している-コードラインの変化する役割を伝え、ブランチ間で作業を移動する。
リストされた問題の私の見解の拡張:
1)コード行のポリシーの変更:
すべてのコード行には、それが書き留められて形式化されているか、開発者の頭の中で完全に暗黙的であるかにかかわらず、ポリシーがあります。たとえば、次のように定義されます。
- コード行へのコミットを許可されているのは誰か
- 必要なテストの量(たとえば、単体テストに合格する必要があるか、回帰テスト、完全なシステムテスト)
- レビューの変更をコーディングする必要がある人の数
- どのような変更が許可されますか
トランクアプローチでは、ポリシーは固定されたままなので、書き留めやすく、コミュニケーションが容易になります(大規模なチームではより重要です)。
例:トランク:
- すべての開発者がコミットできます
- 変更
- ユニットテストに合格する必要があります
- コミット後のコードレビュー
バージョンブランチ:
- メンテナンス開発者のみ
- バグ修正のみ
- 単体テスト+回帰テスト
- コミット前に他の2人の開発者によるコードレビュー
タグブランチ:
開発者のプライベートブランチ:
- 開発者のみがチェックインします
- 変更
- トランクにマージする前にのみテストが必要
- トランクにマージする前のコードレビュー
プロモーションモデルがある場合は、メイン開発中に1つのポリシーがあり、リリースの準備中にポリシーを変更するときに全員に通知する必要があります。次に、行がリリースされたら別のポリシー(コード行用)を通知する必要があります。
プロモーションモデルは簡単に利用でき、ソース管理以外の作業方法に直接マッピングされます。しかし、大規模なチームを作り始めると、それは痛いです。
Linuxカーネルの開発を見ると、プロモーションモデルとトランクモデルの間の緊張がわかります。Linusのツリーはプロモーションです。マージウィンドウとrc/安定化期間の間のサイクルを通過します。しかし、Linux-nextと-mmは、よりトランクのようなラインを提供するために生まれました。
分散SCM/VCSはとにかく多少異なります。各開発には独自のツリーがあり、必要に応じて変更をプルするため、ポリシーをすべての開発者に配布する必要はありません。
オープンソースプロジェクトは、トランクから分岐した後、リリースを安定させるという面倒な作業を人々に強制できないという問題に悩まされています。したがって、プロモーションモデルは、機能に取り組むだけでなく、安定化の取り組みを強制する方法としてより重要です。
2)引越し作業:
開発者は、作業している行のポリシーがバグ修正のみに変更されたときに機能に取り組んでいる可能性があります。開発者は、作業コピーを別のコード行に切り替える必要があります。これは、使用しているSCMシステムに応じて、簡単なものから非常に難しいものまであります。開発者がトランクで作業している場合、作業は常にトランクで行われるため、この問題は発生しません。開発者がプライベートブランチまたは機能ブランチにいる場合、彼らの作業はトランク(およびリリース)にのみ影響を与えます。
機能がすでにチェックインされているが、現在のバージョンから遅れている場合は、その機能を削除する方法を検討する必要があります。この問題はトランクモデルにもまだ存在しますが、少し簡単に解決できる可能性があります。リリースのためにトランクから物事を選択します。これは、機能ブランチが役立つところですが、統合コストがかかります。