答えは、チームの規模とソース管理の品質、および複雑な変更セットを正しくマージする能力によって異なります。たとえば、CVSやSVNのような完全なブランチソース管理では、マージが困難になる可能性があり、最初のモデルの方がよい場合がありますが、IBM ClearCaseのようなより複雑なシステムを使用し、チームのサイズが大きい場合は、2番目のモデルの方が優れている可能性があります。モデルまたは2つの組み合わせ。
私は個人的に機能ブランチモデルを分離します。各主要機能は個別のブランチで開発され、個々の開発者が行う変更ごとにタスクサブブランチが作成されます。機能が安定すると、トランクにマージされます。トランクはかなり安定していて、すべての回帰テストに常に合格しています。リリースサイクルの終わりに近づき、すべての機能ブランチがマージされると、安定性のバグ修正と必要なバックポートのみを行うリリースシステムブランチの安定化とブランチを行い、トランクは次のリリースの開発に使用されます。新しい機能の分岐のために分岐します。等々。
このように、トランクには常に最新のコードが含まれていますが、かなりの安定性を維持し、大きな変更と機能のマージで安定したラベル(タグ)を作成します。機能ブランチは、ペースの速い開発であり、継続的な統合と個々のタスクのサブブランチが頻繁に発生します。機能ブランチから更新されて、同じ機能で作業している全員が同期し続けると同時に、異なる機能で作業している他のチームに影響を与えません。
同時に、履歴を通じて一連のリリースブランチがあり、何らかの理由で製品の以前のバージョンまたは最新のリリースバージョンにとどまっている顧客に、バックポート、サポート、およびバグ修正を提供できます。トランクと同様に、リリースブランチで継続的な統合を設定するのではなく、すべての回帰テストとその他のリリース品質管理に合格すると、統合が慎重に統合されます。
何らかの理由で2つの機能が相互に依存していて、相互に変更を行う必要がある場合は、両方を同じ機能ブランチで開発するか、コードの安定した部分をトランクに定期的にマージしてから変更を更新するよう機能に要求することを検討できます。トランクブランチ間でコードを交換するトランク。または、これら2つの機能を他の機能から分離する必要がある場合は、それらの機能ブランチを分岐させ、機能間でコードを交換するために使用できる共通ブランチを作成できます。
上記のモデルは、スパースブランチとCVSやSVNのような適切なマージ機能がなければ、50人以下の開発者とソース管理システムのチームにはあまり意味がありません。