web-dev-qa-db-ja.com

EclipseでSubversionマージを行う適切な方法は何ですか?

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

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

この質問は、SubclipseとSubversiveのどちらにも固有のものではありません。

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

17
awied

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

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

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

1
MetroidFan2002

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

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

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

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

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

    • マージ元のブランチのURLを選択します
    • [リビジョン]で[すべて]を選択します
    • oKを押します
  5. これにより、競合を解決するために「チーム同期」の観点に移動します(そうでない場合は、自分でそこに移動する必要があります)(以下を参照)

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

  1. トランクプロジェクトの履歴を選択して、最後にトランクにマージした時刻を確認します(これにコメントする必要があります)

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

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

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

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

競合の解決

  1. 「チームの同期」の観点にいる必要があります。これは、新しいファイルと競合するファイルが表示されるコミット目的の通常の同期のように見えます。

  2. 競合が発生したすべてのファイルについて、「右クリック-競合の編集」を選択します(ファイルをダブルクリックしないでください。commitdiffバージョンツールが表示されます。これは非常に異なります)

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

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

72
DH4

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

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

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

4
Some Guy

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

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

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

4
David Pierre

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

4
Joe Skora

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

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

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

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

3
Jean

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

3
T0xicCode

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

2
nku

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

windows->設定→チーム-> SVN->差分ビューアに移動します新しい設定を追加します(ボタンを追加):拡張機能またはmimetype:*-異なるエディタに異なるmimetypeを指定できるようにしたい場合は、それは必要ありませんでした。 alquantor。

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

引数:$ {base} $ {mine} $ {theirs}

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

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

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

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

乾杯

0
fl0w