17

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

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

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

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

4

9 に答える 9

72

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

  1. ブランチ プロジェクトの履歴を調べて、ブランチが取得されたバージョンを特定します

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

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

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

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

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

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

    • 議論のために、このバージョンが 82517 だったとしましょう
  2. これで、ブランチの 82517 を超えるバージョンはトランクにマージする必要があることがわかりました

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

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

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

競合の解決

  1. 「Team Synchronizing」パースペクティブにいる必要があります。これは、新しいファイルと競合のあるファイルが表示されるコミット目的の通常の同期のように見えます。

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

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

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

于 2010-02-05T22:06:54.280 に答える
4

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

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

それが正しければ、比較エディターで変更を正しく行うのはあなた次第です。

于 2008-09-19T01:29:27.067 に答える
4

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

于 2008-09-19T01:03:17.723 に答える
4

まず、Eclipse でファイルを表示したときに ">>>>>" などのファイルが表示される場合は、適切な比較エディターでファイルを表示していない可能性があります。Project ビューまたは Synchronize ビューでファイルを右クリックして [Edit Conflicts] を選択し、競合する領域をテキストではなくグラフィカルに表示する比較エディターを表示してみてください。[競合の編集] で表示される比較エディターは、同期ビューでファイルをダブルクリックしたときに表示される比較エディターとは異なることに注意してください。最後にチェックアウトまたは更新したとき、[競合の編集] 比較ダイアログには 2 つの変更元の違いが表示されます (たとえば、

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

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

于 2011-02-25T07:53:35.403 に答える
3

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

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

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

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

于 2008-09-23T15:17:01.043 に答える
3

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

于 2010-05-02T01:55:39.790 に答える
2

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

于 2010-06-03T01:17:07.823 に答える
1

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

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

KDiff3 は移植性があり、TortoiseSVN は Windows シェルの拡張機能であるため、別の環境を使用している場合は、SVN を使用してマージしようとします。しかし、それははるかに苦痛です:)

于 2008-09-19T01:17:04.023 に答える