.NET 3.5 で書かれたかなり大きなクラス ライブラリがあり、これをアップグレードして .NET 4.0 でも利用できるようにしたいと考えています。
その過程で、私は多くの古いがらくたを取り除き、.NET 4.0 (TPL など) での新しいクラスとサポートをより有効に活用するためにいくつかのコードを書き直します。したがって、クラス ライブラリは分岐しますが、それでも十分に類似しています。いくつかのバグ修正は、同じ方法で両方に行うことができます。
Mercurial でこのクラス ライブラリを整理するにはどうすればよいですか? それが重要な場合は、Kiln (fogbugz) を使用しています。
考えている:
- 1 つのリポジトリ内の名前付きブランチは、バグ修正をあるリポジトリから別のリポジトリに移植できます
- 1 つのリポジトリ内の名前のないブランチも移植できますが、これは面倒に見えると思います
- 別のリポジトリでは、バグ修正を再実装する必要があります (または、mercurial に統合されていない比較ツールを使用して助けてください)
あなたならどうしますか?(私が考えていない他の代替案も大歓迎です。)
クラス ライブラリは領域によって大きく異なることに注意してください。Linq に似た処理を行う古いコレクション タイプのコードがいくつか残っていますが、これは削除します。それを使用するコードは、代わりに Linq メソッドを使用するように書き直します。 . そのため、プロジェクト ファイルをコピーして#if NET40..#endif
セクションを使用するだけではうまくいきません。また、クラス ライブラリの 3.5 バージョンには多くの新機能が追加されることはなく、ほとんどが重要なバグ修正のみであるため、両方のバージョンを同じように "有効" に保つ必要はありません。したがって、すべてのファイルの個別のコピーで十分です。
編集@Rudiの回答hereから、彼が言っていることは次のとおりだと思います。
- 2 つのブランチを作成します (または、1 つの「デフォルト」を保持し、もう 1 つのパスに別のブランチを作成します。私の場合は、「デフォルト」=.NET 4.0 と「net35」=.NET 3.5 になります)。
- 分岐するパスに沿ってそれらを開発する
- 重大なバグ修正が見つかり、これが両方のバージョン (つまり、3.5 と 4.0 の両方) に存在し、共通のコードで修正できる場合、3.5 バージョンには多くの新機能が追加されないため、バグがおそらく元のバージョンに存在する可能性があります(分岐する前)
- したがって、元のバージョンから (またはそれに非常に近い) 別のブランチを作成し、バグ修正を実装してから、このヒントを 3.5 ブランチと 4.0 ブランチの両方にマージして両方を更新します。
私はこれについて考えなければならないでしょう。Mercurial でのマージは、変更ではなくファイルをプルするようです。つまり、バグ修正が必要なファイルに加えられた変更は、以前の段階に「マージ」されるリスクがありますが、テストする必要があります。