8

cms(asp.net Webフォームで実行)用の新しい管理ダッシュボードを作成しています。古いサーバーの中には、さまざまな理由で.NET 2.0しか処理できないものがあるため、ラムダ式などを使用するコードを書き直す必要があります。

Mercurialのようなdvcを使用して、これら2つのバージョンを同時に開発するにはどうすればよいでしょうか。

私の現在のコードベースとMercurialリポジトリは、.NET3.5を対象としています。私はMercurialに比較的慣れていないので、コードベースを分岐する必要があると思いますか?

ベストプラクティスやチュートリアルはありますか?

4

1 に答える 1

13

はい、これには Mercurial を使用できます。これがどのように機能するかです。

new-dot-net新しい .Net バージョンをサポートするため、現在のクローンが呼び出されたとします。あなたはそれのクローンを作成し、それを呼び出す old-dot-netか、そのようなものです。2 つのクローンは同一になり、どちらも .Net 3.5 をターゲットにしています。

old-dot-net.Net 2.0 互換にするために、慎重に小さな変更を加えます。変更を加えると、2 つのクローンが分岐し始めます。

新しいドットネット: ... [a] --- [b]

old-dot-net: ... [a] --- [b] --- [c] --- [d]

ここでは[c][d].Net 2.0 互換性を追加するために変更セットを作成しました。では見たくない下位互換性の変更があるため、old-dot-netクローンにはより多くの変更セットが含まれていることに注意してください。作業を続けるときは、次のことを考慮することが重要です。には、変更セットのサブセットが含まれます。変更は から に流れますが、反対方向には流れません。new-dot-netnew-dot-netnet-dot-netold-dot-netnew-dot-netold-dot-net

で新しい変更を行ったとしnew-dot-netます。で変更するnew-dot-netと、状況は次のようになります。

new-dot-net: ... [a] --- [b] --- [x]

old-dot-net: ... [a] --- [b] --- [c] --- [d]

変更を にバックポートする場合は、次のold-dot-netように変更してold-dot-netからプルしnet-dot-netます。

% cd old-dot-net
% hg pull ../new-dot-net

これにより、 に新しい頭が作成されますold-dot-net:

                             [バツ]
                            /
old-dot-net: ... [a] --- [b] --- [c] --- [d]

[x]変更セットには[b]親の変更セットがあるためです。複数の頭ができたので、頭の数を減らすためにマージする必要があります。[x]マージすることにより、「これがどのように[d]結合されるべきか」というあなたの方法である新しい変更セットを作成します。変更セットがおよび で[x] 触れられていないコードのみに触れている場合、マージは機能するはずです。そうしないと、マージ ツールが表示され、競合を解決する必要があります。マージを chageset としてコミットします。[c][d][e]

                             [バツ]  -  -  -  -  -  -  - 。
                            / \
old-dot-net: ... [a] --- [b] --- [c] --- [d] --- [e]

[x]これで、.Net 2.0 互換コードに変更が組み込まれました。

に変更があるたびに、これを繰り返しますnew-dot-net。さらに機能が追加されたとしましょう:

new-dot-net: ... [a] --- [b] --- [x] --- [y] --- [z]

それらを引っ張った後、old-dot-netあなたは得る

                             [x] --------------.---- [y] --- [z]
                            / \
old-dot-net: ... [a] --- [b] --- [c] --- [d] --- [e]

そして、マージして次のよう[e]にし[z]ます。

                             [x] --------------.---- [y] --- [z]
                            / \ \
old-dot-net: ... [a] --- [b] --- [c] --- [d] --- [e] ----------- [f]

覚えておくべき重要な部分は次のとおりです。

  • で新しい機能を作成しnew-dot-netます。
  • 変更をプルするold-dot-net
  • からold-dot-netへは絶対に押さないnew-dot-netでください。

での変更が でnew-dot-net不要であることが判明したold-dot-net場合でも、それを取り込んでマージする必要があります。ただし、ダミーのマージを実行します。ヘッドが[w]と で、キープし[g]たい場合は、[g]

% HGMERGE=true hg merge -y
% hg revert --all --rev g
% hg commit -m 'Dummy merge with y.'

秘訣は、結果を気にせずにマージを行い、すべての変更を元に戻し、変更されていない作業コピーをマージとしてコミットすることです。[w]そうすれば、世界に「と [g]の組み合わせ」を伝えることができます[g]。つまり、 の変更を破棄できます[w]new-dot-netafterで行われた新しい変更は、[w]通常どおりマージできます。

于 2009-05-28T08:52:14.723 に答える