私のオフィスでは、Visual Source Safe(6.0!)からMercurialに移行しており、状況を処理するための最良の「Mercurial」方法を見つけようとしています。現在、任意のプロジェクトリポジトリで、複数のバージョンを維持しています。つまり、プロジェクトAの場合、ProjA-Dev、ProjA-Rel1、およびProjA-Rel2のVSSリポジトリ(開発リポジトリと過去2つのそれぞれに1つ)があります。リリース)。
現在のところ、(ほぼ)すべての新しい作業は開発リポジトリで実行され、Rel1またはRel2にロールバックする必要があると見なされる変更は手動で行われます(VSSから独自の作業ディレクトリにチェックアウトされたファイル、次に、適切な変更のみをコピーする差分ツールを使用します)。ある時点で、新しいリリースがリリースされると見なされるため、開発リポジトリが複製されてProj * -Rev1になり、前のProj*-Rev1がProj*-Rev2になり、Proj*-Devが続行されます。何も起こらなかったかのように。Mercurialなどのはるかに近代的なツールでこれを達成するためのより良い方法があるはずだと私には思えます。
私の現在の考えでは、各プロジェクトには独自のリポジトリが必要であり、Dev / Rel1/Rel2の区別は異なる名前のブランチによって最適に処理されます。しかし、私が理解できない/見ている/頭を包み込むことができないのは、そのような環境で現在のワークフローをどのように達成するかです。現在のワークフローに従うと、開発ブランチで作業が衰えることなく続行され、特定の変更(すべてではありません!)がRelブランチにロールバック/オーバーされます。これはMercurialの移植/移植機能を介して達成できることを私は知っていますが、TortoiseHgではまだうまくサポートされていないようです。そして、もっと重要なことに、過去の回答は、これに対する最善の解決策は、物事が1で始まるような状態にならないようにすることであることを示唆しているようです。
質問は、現在のワークフローを考えると、そのような状態を回避するための最良の方法は何ですか?Mercurialと分岐に関する多数のガイド(ここにある多くの回答を含む)を読みましたが、この質問に対する明確な答えは見ていません。