0

通常、SVN ブランチをトランクに再統合するとき、次のような履歴を作成します。

trunk   A---B---D---F---H
             \       \ /
branch        C---E---G---X

ここでGはマージ、Hは再統合マージ、X機能ブランチを削除します。Gまた、SVN がとに使用するマージ アルゴリズムに違いがあることもわかりましたH。ここまでは順調ですね。

ただし、1つのことが私を悩ませています:この回答は、再統合マージで何が起こるかに関するSVNドキュメントを次のように引用しています: !」

以来trunc + changes from branch = trunc + (branch - trunk) = branch、再統合マージ後の記録された状態は、ブランチの最後に記録された状態と常にまったく同じであると結論付けています。

この歴史を考えてみましょう:

trunk   A---B---D---F---H---I
             \        \   /
branch        C---E-----G-----X

I上記の理由から、再統合マージの場合、コミット H からの変更は単純に失われると思います。これは正しいですか、それとも私が見逃したものがありますか?

4

1 に答える 1

1

Subversion は最後の同期リビジョンがFであることを認識しているため、 の差を計算trunk@Fbranch@Gてから作業コピーに適用します。

宛先の作業コピーがリビジョンをチェックアウトした場合F、再統合は(競合なしで)スムーズに進み、その後 wc をH(競合の可能性がある)に更新してコミットできるようになります。

コピー先の作業コピーがリビジョンをチェックアウトした場合H、再統合マージが上で実行されますH(この場合、マージ中に競合が発生する可能性があります)。

いずれにせよ、何も失われることはありません。

于 2015-07-22T09:16:15.390 に答える