0

私は Subversion 1.7.x を使用しており、ブランチで開発を行っています。

ブランチを最新の状態に保つために、時々トランクからマージします。
ただし、最新のマージ中に、着信コードはトランクでは完全に正しいものの、ブランチではコンパイルされません。トランク
で変更されたコードは、数回前にブランチで部分的に書き直されているため、これは当然のことです。

マージ操作が正常に完了したことに注意してください。競合はありませんでした。明確にするために、マージ
と言うときは、作業コピーを別のブランチからのコードで変更する操作を意味し、コミットは関与しません。svn merge [source] [dest]

そのブランチは最終的にトランクに再統合されるため、2 つの選択肢があると思います。

  1. マージされたコードをコミットする前にコンパイル エラーを修正します。
  2. トランクからマージします。コミット (編集なしでマージされたコード); コードを編集してコンパイルの問題を修正します。再度コミットします (つまり、後でコンパイルの問題を修正し、新しい別のコミットを実行します)。

コミットする前にマージされたコードを編集した場合 (つまり、#1 を使用)、ブランチを再統合するときにそれらの変更は失われますか?

4

1 に答える 1

1

簡単な答えは: いいえ、変更は失われません。

もう少し詳しく。
再統合マージは、ブランチをトランクにコピーするため、「通常の」同期マージとは異なり、両方が同一になります[1]。「ブランチとトランクの差分をトランク(wc)に適用する」と表現できます。もちろん、再統合マージは実際には再統合マージでなければなりません。Subversion 1.8 はどういうわけか推測しますが、以前のバージョンでは--reintegrateマージ中に引数が必要です。

アップデート:

[1] 実際、いくつかのテストを行ったところ、最後に同期されたリビジョンに更新された作業コピーにマージした場合にのみ結果が同じになることがわかりました。たとえば、トランク 1 ~ 100 をブランチに同期し、トランクにさらに 10 個の追加リビジョンを作成してから、ブランチをトランクに再統合すると、違いが生じる可能性があります。

個人的には、ブランチをトランクの最新リビジョンに同期し、再統合してから、バイナリ ID のフォルダーを比較することを好みます。念のため :)

于 2015-07-06T16:16:25.387 に答える