web-dev-qa-db-ja.com

Tortoise SVNは2つのブランチをマージします

亀のSVNで2つのブランチをマージしようとしています。分岐したため、両方のブランチが変更されました。それらをマージすると、一方の変更のみが取得され、もう一方の変更のみが上書きされます。しかし、すべてのファイルの最新の変更が必要です(同じファイルで作業していません)。

「2つの異なるツリーをマージする」オプションを試して、「From:」と「To:」に2つのブランチを入力しました。両方でヘッドリビジョンを取得しました。その他はすべてデフォルトのままにしました(マージの深さ:ワーキングコピー、空白の比較、その他はすべてオフ)

17
deetz

From URLオプションでは、マージするブランチを指定する必要があります。

たとえば、ブランチAとブランチBの2つのブランチがあり、ブランチBをブランチAにマージするとします。

  • TortoiseSVNでMergeオプションをクリックし、次にMerge two different treesオプションを選択します。
  • From URLでは、ブランチAのURLを言及し、To URLでは、ブランチBのURLを言及してください。

これにより、ファイルを失うことなくブランチBをブランチAにマージします。

参照:このステートメントが見つかりました here

24
Shalmal

Subversionでのマージは常に行われますローカル。マージするブランチは、クリーンチェックアウトでチェックアウトする必要があります。つまり、ローカルで変更することなく最新の状態にする必要があります。次に、他のブランチをマージして、変更をコミットします。

Mergeは特定のブランチの複製ではありません。マージは通常、3方向の操作です。マージするブランチ(と呼ばれるyours)からマージするブランチ(と呼ばれるtheirs)と最後の共通の祖先(LCA)があります。最後の1つは重要です。

yourブランチで変更が行われた場合、マージプロセス中に変更は行われません。 yoursとLCAには違いがあるため、マージアルゴリズムはこれを認識します。 LCAとtheirsの間に違いがある場合、それは変更と見なされます。

私が理解している場合:

  • branch1はトランクから取得されました。
  • branch2branch1から取得されました。

何をマージしようとしていますか? branch1branch2の両方をトランクにマージしますか? コピーtrunkをSubversion経由でbranch1に入れ、コピーbranch1をSubversion経由でbranch2に入れれば、これは可能です。 。このように、Subversionは2つのブランチが履歴上で関連していることを認識しています。

ブランチを作成し、Windowsを使用してファイルをコピーし、ファイルを追加した場合、2つのブランチ間の履歴はなく、マージはより困難です。

branch2の変更をbranch1にマージしてもよろしいですか?もしそうなら、私はこのようなことをします:

  • チェックアウトbranch2
  • branch1branch2にマージし、それらの変更をコミットします。 branch2には、branch1のすべての変更が含まれます。
  • チェックアウトtrunk
  • branch2trunkにマージします。これで、トランクのすべての変更がbranch1branch2の両方に反映されます。
9
David W.