2

かなり大規模なプロジェクトを再構築する必要があるため、機能ブランチを作成しました。機能ブランチは、70% が移動し、20% がコードを変更し、10% が新しいコードです。こんな感じです。

Trunk     Branch     Actions 
2000   =  2001       create branch
|         2002       move lots of file and directories plus a few file edits
|         2003       lots of edits plus a few more file moves
2004      |          a few edits to files that have been moved in the branch
|         2005       some more edits and a new file or two
2006      |          a few edits to files that have been moved in the branch
|         2007       feature is done... time to pull changes from the trunk

トランクからブランチに変更をプルしようとすると、「ツリーの競合」エラーが表示されますが、他にはあまりありません。これは、ブランチで移動され、トランクで変更されたファイルを追跡したときに見つけたものです。

\old\path\file.txt - trunk version 2006
\new-path\file.txt - branch version 2007

---- I would like ----
\new-path\file.txt - merged trunk version 2006 and branch version 2007

私はSVN 1.7と最新のTortoiseSVNクライアントを使用しているので、変更は自動的に追跡され、これは起こらないと思っていました...私は間違っていたと思います. 私の最初の考えは、コマンドラインを使用して別のブランチを作成し、すべてが再び機能するまで変更セットを1つずつマージすることですが、これを行うためにどの引数を使用すればよいかよくわかりません. コミット 2002 が私の祖先/歴史を完全に破壊したように感じますが、よくわかりません。

この問題を解決する方法について何かアドバイスはありますか?

4

1 に答える 1

2

変更は自動的に魔法のように追跡され、これは起こらないと思っていました...

いいえ、マージの反対側で名前を変更して編集すると、1.8 以降でもツリーの競合が発生します (1.7 とは異なり、マージはわずかに改善されています)。

コマンドラインを使用して別のブランチを作成し、変更セットを1つずつマージすることを考えています

間違った考え。ツリー競合の両方の原因を知っているため、このマージセットに強制的にマージ\old\path\file.txt\new-path\file.txt、その後でのみツリー\old\path\をマージし、\new-path\ツリー競合なしでマージします

PS - Subversion での「リファクタリング地獄」を回避するために、私は常にリファクタリングとマージを別々にリファクタリングすることをお勧めします (SCM では、ファースト クラス シチズンとしてマージを使用)。ただし、マージセットをプッシュバックすることはできません)

于 2014-07-15T04:44:03.513 に答える