0

トランクから 1 年以上別々に維持されてきた 2 つのブランチ (ブランチ A と B など) があります。現在、一方を他方にマージする必要があります。私が望むのは、両方の変更を比較し、マージされたブランチに入る新しい変更があれば何でも比較することです。

過去にSVNマージを使用したことがありますが、私が理解した方法は、あるブランチの「差分」を別のブランチに適用することです。すべての差分は必要ありません-それだけが新しいです。

SVNでこれを行うことは可能ですか?

ありがとう。

4

1 に答える 1

0

Merge は 3 者間マージを行います。これは標準的なアルゴリズムで、次のように機能します。

  • 最新の共通祖先 (略してベース) リビジョンが見つかりました。これは、ブランチが作成される直前のリビジョン、またはあるバージョンから別のバージョンにマージされた最後のリビジョンです。
  • 'mine' (チェックアウトしたもの) が 'base' と同じであるが、'theirs' (マージする引数) が異なる各行について、その行は 'theirs' から使用されます。
  • 'theirs' が 'base' と同じである各行については、ローカル バージョンが使用されます (base から変更されていない場合を含む)。
  • 'mine' と 'theirs' で同じ行がある場合は、'base' が何であっても、そのバージョンが使用されます。
  • 「base」、「mine」、「theirs」の 3 つすべてが異なる行ごとに競合が発生し、手動で解決する必要があります。

したがって、これは両方のブランチからのすべての変更を適用します。同じ変更が両側で行われた場合は、それが適用されます。同じコードが異なる方法で変更された場合、それは競合であり、解決する必要があります。また、それがどのリビジョンから来たのかはわかりません。それらはすべて一緒にロールアップされています。

それが望ましくない場合は、マージするリビジョンを手動でリストするという別のオプションがあります。それは、それらの特定のリビジョンで行われた変更のみを、一度に各連続範囲に適用します(アルゴリズムは実際には同じですが、ベースは選択された範囲の開始前のリビジョンです)。つまり、必要な変更を手動で選択する必要があります。このアプローチには 2 つの問題があります。それは多くの作業が必要になることと、後の変更を機能させるために必要なすべての変更を慎重に選択する必要があることです。

これで、すべての「新しい」変更が必要になります。コンピュータが理解できる方法で、意味するものを定義する必要があります。そして、上記の 2 番目の問題に注意する必要があります。変更は相互に依存している可能性があり、依存している変更も選択する必要があります。

于 2012-06-06T09:25:24.487 に答える