2012-05-04 7 views
2

問題:ここでsvn Mergeとの違いは何ですかb1 b2またはb1とb2を簡単に修正するか?

b1 = svn branch 1 
b2 = svn branch 2 

私は違いを理解することはできませんよ。私ならば、私はbranch b2

  • branch b1をマージする場合

    1. diff37でパッチを作成するb1 and b2 MELDのようなツールを使用するか、または超えて比較し、その後、b2

    にそのパッチを適用するには、そのまったく同じ/似てますか?

    はいの場合、私はできるのですかstep 2オフライン[インターネットなし]とstep 1は、svn mergeでのみオンラインで行うことができますか?

    説明してください!

    あなたはB1とB2の両方のファイルFがあるとします。

  • 答えて

    0

    はここで差分のとマージの基本的な違い(私たちも、SVNについて話されていない)を示す一例です。 Fはb1に余分な行を持ちますが、b2にはありません。 Diffingは、diff b1/F b2/Fまたはdiff b2/F b1/Fのいずれかに応じて異なる結果をもたらします。 1つのケースでは、回線が削除されたこと、もう1つは追加されたことを伝えます。どのパッチを適用するのですか?

    3番目のソース(通常は共通の祖先)に対してMerge(通常のno-svn merge)が行われます。次に、通常、行が追加されたか削除されたかを知ることができます。もしそれが祖先にあれば、それは削除されます。

    つまり、からの変更は、b1とb2の両方の変更を適用しています。シンプルな差分は、どのような変更が行われたかを知ることができません。第3のソースはありません。

    ここでも共通ソースがあれば、svn mergeと同様の結果が得られます。あなたは、まったく同じ変更が両方のブランチに適用されたときに矛盾があることを叫んで、SVNが時々本当の害虫であると主張することもできます。理論的には、オフラインでのマージでは正しい結果が得られない場合がほとんどです。ほとんどの場合、競合を認識しないように適用されます。 SVNはマージのいくつかの有用な吠えをします。

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

    これまで通り、GitまたはMercurialを使用してください。

    +0

    私は 'GIT'を使いたいです - しかし私の会社はsvnを使います。とにかくそれは重要ではありません。 同じファイルがsvnで衝突し、パッチ適用ではなくなった場合 - これはsvnの副作用であり、むしろ有用です。 「ステップ1」と「ステップ2」の出力に違いはありますか? svnはマージについて知っていますか?私は、svnがマージが起こったことを知っているのですか、または変更は単にコミットされた変更ですか? –

    +0

    はい、異なる場合があります:b1 == b(オリジナル)、b2で行が削除されます。 b1とb2を区別してパッチを当てると、その行が戻されます!しかし、それはあなたが望むものではありません。マージにより、行は削除されたままになります。また、SVNはマージが起こったことを知っていますが、 'svn merge'を実行し、 'outside'マージではない場合に限ります。 –

    +0

    svnはマージが起こったことをどのように知っていますか?それでもそれでも、それは重要ですか? どちらの場合でも変更を元に戻すことができるためです。 [マージされた/パッチが当てられた] だから..その情報はどのように役立ちますか? –

    関連する問題