3

.NET 3.5 で書かれたかなり大きなクラス ライブラリがあり、これをアップグレードして .NET 4.0 でも利用できるようにしたいと考えています。

その過程で、私は多くの古いがらくたを取り除き、.NET 4.0 (TPL など) での新しいクラスとサポートをより有効に活用するためにいくつかのコードを書き直します。したがって、クラス ライブラリは分岐しますが、それでも十分に類似しています。いくつかのバグ修正は、同じ方法で両方に行うことができます。

Mercurial でこのクラス ライブラリを整理するにはどうすればよいですか? それが重要な場合は、Kiln (fogbugz) を使用しています。

考えている:

  1. 1 つのリポジトリ内の名前付きブランチは、バグ修正をあるリポジトリから別のリポジトリに移植できます
  2. 1 つのリポジトリ内の名前のないブランチも移植できますが、これは面倒に見えると思います
  3. 別のリポジトリでは、バグ修正を再実装する必要があります (または、mercurial に統合されていない比較ツールを使用して助けてください)

あなたならどうしますか?(私が考えていない他の代替案も大歓迎です。)

クラス ライブラリは領域によって大きく異なることに注意してください。Linq に似た処理を行う古いコレクション タイプのコードがいくつか残っていますが、これは削除します。それを使用するコードは、代わりに Linq メソッドを使用するように書き直します。 . そのため、プロジェクト ファイルをコピーして#if NET40..#endifセクションを使用するだけではうまくいきません。また、クラス ライブラリの 3.5 バージョンには多くの新機能が追加されることはなく、ほとんどが重要なバグ修正のみであるため、両方のバージョンを同じように "有効" に保つ必要はありません。したがって、すべてのファイルの個別のコピーで十分です。


編集@Rudiの回答hereから、彼が言っていることは次のとおりだと思います。

  1. 2 つのブランチを作成します (または、1 つの「デフォルト」を保持し、もう 1 つのパスに別のブランチを作成します。私の場合は、「デフォルト」=.NET 4.0 と「net35」=.NET 3.5 になります)。
  2. 分岐するパスに沿ってそれらを開発する
  3. 重大なバグ修正が見つかり、これが両方のバージョン (つまり、3.5 と 4.0 の両方) に存在し、共通のコードで修正できる場合、3.5 バージョンには多くの新機能が追加されないため、バグがおそらく元のバージョンに存在する可能性があります(分岐する前)
  4. したがって、元のバージョンから (またはそれに非常に近い) 別のブランチを作成し、バグ修正を実装してから、このヒントを 3.5 ブランチと 4.0 ブランチの両方にマージして両方を更新します。

私はこれについて考えなければならないでしょう。Mercurial でのマージは、変更ではなくファイルをプルするようです。つまり、バグ修正が必要なファイルに加えられた変更は、以前の段階に「マージ」されるリスクがありますが、テストする必要があります。

4

1 に答える 1

3

異なる環境 (= 基本的には 2 つの匿名ブランチ) に 2 つのクローンを使用し、各クローン内で異なるブランチ名を使用することもあります。また、メイン ブランチ間のマージを容易にするために、バグ修正または交換可能な機能ごとに新しいブランチを使用し、できるだけブランチ ポイントに近いところから開始します。4.0 ツリーのバグ修正は、そこにある他の変更によりマージの問題を引き起こす可能性が高いため、3.5 ブランチでバグ修正を開発しようとします (このアプローチが問題を引き起こさないと言っているわけではありません)。

于 2010-05-20T13:19:29.553 に答える