2012-02-22 15 views
0

EclipseでSubclipse 1.6xプラグインを使用しています。シナリオを最初に説明しましょう:Subclipseマージ問題 - マージ結果と一致しないドライラン

私はリビジョンr1〜r100のプロジェクトのトランクを持っています。 リビジョンr100でブランチを作成し、r101からr105までコミットを開始しました。 この時点で、私は私の支店が更新されるようにトランクから変更を導入すると思った。

しかし、合併の間違いのために、私はトランクから私の支店にr80をマージしてリビジョンr106としてコミットしました。だから私はブランチでr106の私の変更を元に戻し、このブランチに別のコミットr107をします。

この間、トランクにはr108とr109というコミットがあります。 r106で私の悪いコミットを元に戻した後、私はブランチからr109までのすべての変更を私のブランチに(マージすることによって)正しく取り込み、私のブランチが最新であるようにし、ブランチをr110としてコミットします。

すべてが良好です。今私はブランチが必要ないと決めたので、ブランチ(r110)のすべての変更をトランクにマージさせてください。ですから、このマージの後、私のブランチがトランクで最新であるように、私がブランチで行った変更(そのブランチのリビジョンr 101以降)が表示されます。

私はチームを作成します - "Merge with From url"と "To url to my branch path"を行います。 Fromリビジョンはトランク(r109)の最後にマージされたリビジョンであり、使用されたリビジョンは私のブランチ(r110)の最新リビジョンです。私はDry Runを試して、MergeウィンドウでUnified Diffファイルオプションを作成しました。両方とも正しく見え、唯一更新されたファイルはブランチで変更したものです。

私はマージを実行し、マージ結果はドライランとは異なります。最初に、それはDry Run(私が期待していたもの)によって示されたファイルを正しくマージします。しかしそれはそこで止まらない。 R80を通じて逆マージR110 --- :(???ためのブランチでの私の間違ったマージのものであってもよい)R110経由R80をマージ---

を 、その後のようなものを行います。それは、このような何かをしようとします。

最終結果は、ドライランの結果と他のファイルの多くの更新/変更(私が推測するように、2回目のマージとリバースマージのため)と全く同じようにマージされました。

なぜこれが起こっているのか、そしてドライランの結果とマージ結果を正確に一致させる方法についての考えはありますか?作成されたUnified diffファイルでさえ正しいです。

長い投稿を読んでいただきありがとうございます。

答えて

0

私はこれを理解したか、少なくとも私の場合は解決しました。私の支店では、r80をトランクから誤ってマージしてr106としてコミットしたために問題が発生しました。次に、Team> Revert>最後のコミットを実行して、このマージコミットを元に戻し、これを新しいコミットr107としてチェックしました。

これには2つの問題があります。まず、SVNでマージコミットを元に戻す最良の方法ではありません。詳細についてはGoogleをご覧ください。

第2の問題は、(複数のコミットで)これらの変更をトランクにマージすると、SVNは各コミットを1つずつトランクに適用しようとします。私がr80をマージしてブランチ上でr106を台無しにしたので、SVNはファイルの相違のために変更について混乱します。これを避け、SVNに祖先について心配することなく、ブランチの相違点や変更をトランクにマージするように指示するには、Mergeウインドウの "Ignore ancestry"オプションをチェックしてください。これは私のための問題の世話をした。

また、SVNマージでは、ドライランの結果はファイル間でDiffを実行することと同等です。しかし、マージを行うと、ファイルの祖先を調べ、マージを行うために各コミットを1つずつ持ち込みます。したがって、結果は必ずしも同じではない可能性があります。 SVNのドキュメントにこれに関する詳細があります。

これは私が私の経験から理解したものであり、私は自分の投稿に他の回答を得ていないので答えとしてここに掲示しています。私が完全に間違っている場合は、コメントを追加してください。

1

Subversionのマージダイアログは、Subversion 1.5以前とマージトラッキングの導入以来、機能していませんでした。 Subclipseのアップデートサイトに含まれているCollabNet Merge Clientプラグインをインストールして、同じ結果が得られるかどうかを確認することをお勧めします。

このクライアントがインストールされている場合、[チーム]> [マージ]オプションを選択するとウィザードが表示されます。

+0

コメントしていただきありがとうございました。また、私はCollabNetよりももっと親しみやすいSubclipseを見つけました。 YMMV – kriver