10

TortoiseSVN を使用して、フォルダーの名前変更など、trunkからの最新の変更をbranch-Bにマージしています。

その前に、ブランチ Aトランクに再統合しました。そのブランチでは、フォルダの名前が変更され、その中のファイルが変更されていました。Branch-Bにはこれらのファイルの異なるリビジョンが含まれていますが、フォルダーには元の名前が残っています。

Trunkbranch-Bにマージする場合、SVN は単に名前を変更したフォルダーを新しいフォルダーとして追加し、元の名前のフォルダーでツリーの競合を報告します。ファイルのリビジョン自体がマージされることはなく、両方のフォルダーが残っています。適切な svn:mergeinfo をすべて保持しながら、可能な限りクリーンなマージを行うために複数のオプションを試しましたが、何も機能していないようです。

このマージをきれいに完了するための正しい方法を知っている人はいますか?

TortoiseSVN 1.8.10、サブバージョン 1.8.11

ビジュアルは次のとおりです。

/trunk (before reintegrating branch-A)
  /Folder1
    file1
    file2
    file3

/trunk (after reintegrating branch-A)
  /Folder1-Renamed
    file1-change1
    file2-change1
    file3

/branch-B
  /Folder1
    file1-change2
    file2-change2
    file3

TL;DR: 2 つのブランチのいずれかで含まれているフォルダーの名前が変更された場合、2 つのブランチ間でファイル リビジョンをきれいにマージするにはどうすればよいですか?

4

2 に答える 2

9

Subversion では、このような構造ツリーの競合を解決する本当にきれいな方法はありません。基本的に、あなたがする必要があるのは次のとおりです。

  • 作業コピーtrunkにマージbranch-B
  • file1との変更の差分を手動で作成し、それらを新しくマージされたディレクトリ内の対応するファイルfile2に適用しますbranch-BFolder1-Renamed
  • Folder1現在は使用されていないディレクトリを削除します
  • すべてがまだ機能していることを確認してください
  • 現在の状態を正しい状態として受け入れる ( http://svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.htmlも参照)
  • 専念

申し訳ありませんが、svn を使用した場合ほど簡単にはなりません。私は特定の種類のチーム設定に Subversion を使用することを大いに気に入っていますが、ツリー競合の悪夢 (およびそれらの難解でエラーが発生しやすい解決メカニズム) には、定期的に泣きたくなります (そして、永久に git に切り替えます)。

于 2015-02-13T08:21:55.103 に答える
0

このようにコマンドラインで実行できます。同等の手順は、TortoiseSVN またはその他のクライアントで機能するはずです。

名前の変更がトランクのリビジョン 1000 で行われ、トランクを Branch-B にマージするとします。

# merge everything before the rename
svn merge ^/trunk@999
svn commit -m 'merge from trunk up to 999'
svn update

# merge everything starting with the rename
svn merge ^/trunk
# for tree conflicts on directories, accept the incoming deletion, and make note of the path

# for each tree conflict, take your changes to the old folder,
# and re-apply them to the new folder using a two-URL merge,
# then delete the unnecessary mergeinfo.
# e.g. for Folder1 vs Folder1-renamed:
svn merge ^/trunk/Folder1@999 ^/branches/Branch-B/Folder1 ./Folder1-renamed
svn propdel svn:mergeinfo ./Folder1-renamed

svn commit -m 'merge from trunk'
于 2021-07-09T18:59:58.433 に答える