質問

私は Eclipse で CVS マージを行う方法にはかなり慣れており、Subclipse と Subversive の両方が SVN リポジトリで動作する方法には満足していますが、マージを適切に行う方法はよくわかりません。

マージを行うと、CVS で慣れているように、マージで置き換えられる古いファイルを上書きするのではなく、マージされたファイルをプロジェクト内の別のディレクトリに貼り付けようとするようです。

この質問は、Subclipse または Subversive に特有のものではありません。

助けてくれてありがとう!

役に立ちましたか?

解決

Subversion への主なアクセスとして Eclipse のプラグインを使用しないことをお勧めします。

Windows で開発している場合、TortoiseSVN は私が見た中で Subversion アクセスに最適なプログラムです。マージしたいディレクトリを参照し、それを右クリックして Tortoise SVN マージ オプションを使用します。非対話型マージを想定すると、競合が発生した場合は、競合した各ファイルを調べて、解決済みとしてマークする前に競合を編集する必要があります。このプロセスには、KDiff3 というプログラムをお勧めします。このプログラムは、ローカル リポジトリのコピー (マージ前に .svn に保存されていたもの)、ローカル コピー (変更を含む)、およびリポジトリからのコピーを表示し、次のことを可能にします。マージの結果を簡単に確認できます (必要に応じて手動で変更することもできます)。また、多数の小さな競合も自動的に処理します。

KDiff3 はポータブルであり、TortoiseSVN は Windows シェル拡張機能であるため、別の環境を使用している場合は、SVN を使用してマージすることをお勧めします。しかし、それははるかに苦痛になります:)

他のヒント

ブランチ全体をトランクにマージする

  1. ブランチのプロジェクト履歴を調べて、ブランチの取得元のバージョンを確認します。

    • デフォルトでは、Eclipse Team の「履歴」には過去 25 のリビジョンのみが表示されるため、そのビューで「すべて表示」というラベルの付いたボタンをクリックする必要があります。
    • 「すべて表示」と言うと、分岐日以降に戻り、trunk のすべての履歴も表示されるため、分岐した場所でコメントを検索する必要があります。
    • 注記:これと同じタスクに Tortise SVN を使用すると (ブランチに移動して「ログの表示」を選択)、ブランチ履歴のみが表示されるため、ブランチがどこから始まったかを正確に知ることができます。
  2. これで、82517 がブランチ履歴の最初のバージョン ID であったことがわかりました。したがって、82517 以降のブランチのすべてのバージョンには、トランクにマージしたい変更が含まれています

  3. 次に、Eclipse ワークスペースの「トランク」プロジェクトに移動し、「右クリック - チーム - マージ」を選択します。

  4. デフォルトのビューは 1 URL マージです

    • マージ元のブランチの URL を選択します
    • リビジョンで「すべて」を選択します
    • OKを押します
  5. これにより、競合を解決するために「チーム同期」パースペクティブに移動します (表示されない場合は、自分でそこに移動する必要があります) (以下を参照)

より多くのブランチの変更をトランクに再マージする

  1. トランクのプロジェクト履歴を調べて、最後にトランクにマージした日時を特定します (これをコメントする必要があります)

    • 議論のために、このバージョンが 82517 だったとしましょう。
  2. これで、ブランチ内の 82517 より大きいバージョンはすべてトランクにマージする必要があることがわかりました。

  3. 次に、Eclipse ワークスペースの「トランク」プロジェクトに移動し、「右クリック - チーム - マージ」を選択します。

  4. デフォルトのビューは 1 URL マージです

    • マージ元のブランチの URL を選択します
    • 「リビジョン」で「リビジョン」ラジオボタンを選択し、「参照」をクリックします。
    • これにより、最新の 25 ブランチ リビジョンのリストが開きます。
    • 82517 より大きい番号を持つすべてのリビジョンを選択します
    • [OK] を押します (ラジオ ボタンの横の入力フィールドにリビジョン リストが表示されます)。
    • OKを押します
  5. これにより、競合を解決するために「チーム同期」パースペクティブに移動します (表示されない場合は、自分でそこに移動する必要があります) (以下を参照)

競合の解決

  1. 「チーム同期」の視点にいるはずです。これは、新しいファイルや競合のあるファイルを確認するコミット目的の通常の同期と同じように見えます。

  2. 競合が見られるすべてのファイルについて、「右クリック - 競合の編集」を選択します。 (ファイルをダブルクリックしないでください。コミット差分バージョン ツールが表示されます。これはまったく異なります)

    • 「<<<<<<< .working」または「">>>>>>> .merge-right.r84513」のようなものが表示される場合は、間違った編集モードになっています。
  3. ファイル内のすべての競合を解決したら、ファイルに「マージ済みとしてマーク」するように指示します。

  4. すべてのファイルに競合がなくなったら、Eclipse プロジェクトを同期し、ファイルを SVN にコミットできます。

私は通常、両方のブランチをチェックアウトしてから、2 つのソース ツリーの同期のような比較を行う「相互比較」オプションを使用します。変更を 1 つのブランチに統合した後、リポジトリに再コミットできます。

Eclipse 統合を使用すると、完全に正常に動作します。

CVS からの主な変更点は、ブランチからの差分のみをマージすること、つまり、あるリビジョンから別のリビジョンへの変更だけをマージすることです。つまり、何らかの方法で正しい開始リビジョンを追跡する必要があります(SVN 1.5のマージ履歴がない場合)。

それが正しければ、比較エディターで変更を正しく反映できるかどうかはあなた次第です。

まず、Eclipse でファイルを表示したときに「>>>>」などが表示される場合は、適切な比較エディターでファイルを参照していない可能性があります。プロジェクト ビューまたは同期ビューでファイルを右クリックし、[競合の編集] を選択すると比較エディタが表示され、競合領域がテキストではなくグラフィックで表示されます。「競合の編集」で表示される比較エディターは、同期ビューでファイルをダブルクリックしたときに表示される比較エディターとは異なることに注意してください。ダブルクリックした比較エディターには、現在のファイルとそのファイルが存在していたときの状態との違いが表示されます。最後にチェックアウトまたは更新したとき、[競合の編集] 比較ダイアログには 2 つの変更元間の差異 (たとえば、マージした変更とマージ前にワークスペースに存在していた変更など) が表示されます。

次に、Eclipse 破壊的プラグインの一部のバージョンには、マージ変更を受け入れたすべてのファイルが競合があるとして誤ってマークされる原因となるバグがあることに注意してください。このバグは修正されましたが、多くの人はまだ修正を入手するためにアップデートしていないようです。詳細はこちら:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=312585

svn を使用すると、変更されたツリーをクリーンな状態に戻すのは非常に簡単であることを覚えておいてください。マージ先ブランチにクリーンなワークスペースを用意し、マージ コマンドを実行してマージ元ブランチから変更をインポートし、ワークスペースを同期するだけで、マージ変更されたすべてのファイルと競合を示す通常の Eclipse 比較ウィンドウが表示されます。

何らかの理由で競合を解決できない場合は、プロジェクトを svn revert してクリーンな状態に戻すことができます。そうでない場合は、その場でマージを実行し、完了したらコミットできます。コミットする必要はないことに注意してください。競合の処理が完了したら、開発ビューに戻り、コードがコンパイルされることを確認し、単体テストなどを実行してから、再度同期してコミットすることもできます(競合がローカルに発生したら)彼らは戻らないと決めた)

前回見たときは、subclipse merge コマンドを使用すると、マージされたファイルが上書きされ (競合領域を示すために競合マーカーを使用)、マージの元の左側と右側が同じ場所に配置されます。別のディレクトリに何も置かないでください。

経験則として、すべてのマージ変更を 1 つのコミットでコミットし、必要に応じて後でマージをロールバックできるように、コミットにはマージ変更のみを含めることが最善です。

openCollabNet の subclipse 用マージ ツールは非常に優れています。利用可能なマージ タイプは数多くありますが、私がシームレスに実行したマージはこれです。私はそれをお勧めします。

Eclipse の同期ビューに欠けているのは、チェックイン機能です。チーム同期ビューでは、すべての変更を表示して競合を解決できるため、Java ビューに戻ってチェックインするのではなく、その場でチェックインするほうが直感的です。

外部マージエディター (KDIFF3) でマージし、Eclipse からマージを開始する方法を探していたので、ここにたどり着きました。私は上記の回答に満足できませんでした。したがって、Eclipse で SVN のマージおよび差分エディターとして kdiff3 を構成する方法は次のとおりです。

Windows-> fearnance→Team-> svn-> diff Viewer新しい構成を追加(ボタンを追加)に移動します。拡張子または MIME タイプ:* - 異なるエディターに異なる MIME タイプを指定したい場合は、alquantor を使用する必要はありませんでした。

差分:プログラム パス C:\Program Files\KDiff3\kdiff3.exe (またはマージ エディターがある場所 - Windows パスについては念のため、コメントに Linux バージョンを追加するか、この回答を編集してください。)

引数:${ベース} ${私のもの} ${彼ら}

マージ:プログラム パス C:\Program Files\KDiff3\kdiff3.exe

引数:${base} ${mine} ${theirs} -o ${merged}

これはおそらく他のマージ エディタでも同様に機能しますが、引数の構文が異なります (それを理解してお知らせください :) )。

使用法は、マージの場合は通常どおり (チーム -> 競合の編集)、差分ビューの場合は比較 -> foo です。

乾杯

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top