これについて事前に考えていなければ、それはかなり難しいことです。
しかし、将来的には、これを行うために自分自身を設定する方法は次のとおりです。
分岐とマージの両方を非常によくサポートする、実際のバージョン管理システムを入手してください。歴史的に、これはgitやMercurialのようなものを意味していました。これは、Subversionのマージサポートが非常に弱いためです。(ただし、Subversionチームは最近、マージサポートの改善に取り組んでいます。)Windows側では、このようなツールに最適なVCツールがわかりません。
個々の機能の作業を整理する方法を決定します。1つのアプローチは、各機能を独自のブランチに保持し、新しい機能の準備ができたときにのみメインブランチにマージすることです。ここでの目標は、メインブランチを常にほぼ出荷可能に保つことです。これは、機能のブランチがほこりを集めない場合に最も簡単です。おそらく、各プログラマーは一度に1つまたは2つの機能のみを処理し、準備ができたらすぐにそれらをマージできますか?
または、バージョン管理履歴から個々のパッチを選択することもできます。これは面倒でエラーが発生しやすいですが、正確に1つの完全な変更を行う非常にクリーンなパッチを作成する特定の非常に統制のとれた開発グループでは可能かもしれません。このタイプのパッチは、Linuxカーネルコミュニティにあります。Linux 2.6 gitwebのいくつかのパッチを見て、このスタイルの開発がどのように見えるかを確認してください。
トランクを常に「ほぼ出荷可能」に保つのに問題がある場合は、ExtremeProgrammingExplainedなどのアジャイルプログラミングに関する本を読むことをお勧めします。新しいコードが非常にバグが多く、基本的な論理エラーを見つけるために長期間のテストが必要な場合、世界中のすべての分岐とマージは役に立ちません。
更新
機能ブランチは継続的インテグレーションでどのように機能しますか?一般的に、私はメインブランチと同じように、チェックインのたびに機能ブランチを構築する傾向があり、開発者は多かれ少なかれ毎日コミットすることを期待しています。しかし、もっと重要なことは、機能ブランチをメインブランチに非常に積極的にマージしようとしています。2週間前の機能ブランチは、誰かが自分の小さな世界で暮らしていることを意味するため、非常に緊張します。
クライアントがすでに機能している機能の一部のみを必要としている場合はどうなりますか?これは私に少し心配するでしょう、そして私はクライアントがなぜいくつかの機能だけを望んでいるのか彼らに尋ねたいと思います。彼らはコードの品質に神経質になっていますか?適切な機能を構築していますか?クライアントが本当に望んでいる機能に取り組んでいて、メインブランチが常にしっかりしている場合、クライアントは実装したすべてのものを熱心に入手する必要があります。したがって、この場合、私は最初にプロセスの根本的な問題を探し、それらを修正しようとします。
ただし、このリクエストに特別なブルームーンに一度の理由がある場合は、基本的に新しいトランクを作成し、いくつかのブランチを再マージし、他のパッチをチェリーピックします。または、他の投稿者が示唆しているように、一部のUIを無効にします。しかし、私はそれを習慣にしません。