私が考えることができるシナリオとそれらを解決する方法は次のとおりです(可能であれば):
1) ファイルがコピーされ、変更が (元の URL に) コミットされている
1a) ブランチにそれらのファイルがまだない場合:
- ファイル(またはそれらを含むディレクトリ)をブランチにsvn-copyします(これにより履歴が保持されます)
- トランク内の特定のファイルに他に変更がない場合は、それらのファイル/エンクロージング ディレクトリのトランクを、コピーの直前のリビジョンに戻します。
- これらのファイルへのトランクに変更があった場合でも、逆マージを実行することで、ブランチに属する変更を取得できる場合があります。一部の変更が重複していない限り、これは成功するはずです。
1b) ブランチにそれらのファイルが既にある場合:
- トランクの変更をブランチに svn-merge
- 1a) と同じトランクの考慮事項
2) ファイルがコピーされ、変更が加えられましたが、コミットされていません (コピーによって変更されていないため、元の URL に)
注: 変更はまだコミットされていないため、保持する履歴はなく、トランクとは何の関係もありません
2a) ブランチにそれらのファイルがまだない場合:
- 正しくコピーされていないファイル/ディレクトリの物理コピーを作成します
- 問題のあるフォルダーをブランチの作業コピーから削除します
- 以前にコピーしたファイル/ディレクトリをブランチの作業コピーの適切な場所にコピー/移動します
- ブランチにファイルを追加する
2b) ブランチにそれらのファイルが既にある場合:
- 正しくコピーされていないファイル/ディレクトリの物理コピーを作成します
- 問題のあるフォルダーをブランチの作業コピーから削除します
- ブランチの作業コピーを更新する
- 以前にコピーされたファイル/ディレクトリを、ブランチの現在の最新の作業コピー内の対応するファイル/ディレクトリとマージ(*)します。
- ブランチにファイルを追加する
(*) WinMerge などの通常のマージ ツールを使用します。
更新:編集後、状況がよくわかりました(上記は、手動でコピーした後、コピーされたフォルダーのURLがまだトランクを指しているという前提でした)
svn propset --revprop -r <revision> snv:mergeinfo <updated mergeinfo>
マージ情報を「修正」するためにブランチで (pre-revprop-change フックによってブロックされていない限り)を使用してみることができますが、svn はこの情報をその操作の一部 (例: マージ); また、後者のため、更新されたコンテンツには十分注意する必要があります。
より良いオプションは、コピーされたファイルが参照するトランクのリビジョンを含めるために、ブランチへの間違ったコミットのリビジョンでログを更新することだと思います。このようにして、必要に応じて情報を利用できますが、svn の将来の操作を台無しにするリスクはありません。このアプローチの大きな欠点は、ブランチをトランクにマージすると、解決しなければならない競合が発生する可能性があることです (マージ情報が更新されていないため)。この操作を行うコマンドは次のとおりです。svn propset --revprop -r <revision> svn:log <updated log message>