2

問題:

ここ:

b1 = svn branch 1
b2 = svn branch 2

の違いを理解できません:

  1. とマージするbranch b1branch b2

  2. meldb1 and b2やbeyond compareなどのツールを使用して差分をとってパッチを作成し、そのパッチを適用するとb2

それはまったく同じ/似ていますか?

はいの場合、step 2[インターネットなしで] オフラインでstep 1できるのに、オンラインでしかできないのはなぜsvn mergeですか?

説明してください !!

4

1 に答える 1

0

これは、差分とマージの基本的な違いを示す例です(SVNについては話していません)。

b1とb2の両方にファイルFがあるとします。Fにはb1に余分な行がありますが、b2にはありません。異なると、あなたdiff b1/F b2/Fか。かによって異なる結果が得られますdiff b2/F b1/F。ある場合には、その行が削除されたことを示し、別の場合には、その行が追加されたことを示します。では、どのパッチを適用しますか?

マージ(通常のno-svnマージであっても)は、3番目のソース(通常は共通の祖先)に対して実行されます。次に、通常、その行が追加されたか削除されたか(祖先にある場合は削除され、そうでない場合は削除された)が追加されたかどうかを確認できます。

つまり、マージとは、 b1とb2の両方からの変更を適用することです。単純な差分では、どのような変更が行われたかを知ることはできません。3番目のソースはありません。

ここで、共通のソースもある場合は、svnmergeと同様の結果を得ることができます。まったく同じ変更が両方のブランチに適用されたときに競合があると叫ぶことで、SVNが本当の害虫であると主張することもできます。理論的には、オフラインマージで正しい結果が得られない場合の例を示すことができます。これらは、ほとんどの場合、競合を認識しない場合に適用されます。SVNに加えて、マージのいくつかの便利なブックイーピングを行います。

したがって、どうしても必要な場合は、次のようにすることができます。共通ソースbのコピーを保持します。b1をb2にマージする必要がある場合:diff b1 bそしてパッチをb2に適用します。

さらに良いのは(前述したように)GitまたはMercurialを使用することです。

于 2012-05-04T07:41:31.467 に答える