0

他の同様の投稿と回答を見ました。しかし、私の状況は次のように制限されています。

ブランチ repo/A には子ブランチ repo/B と repo/C があります。C は新しい foo.c を A にプッシュ/マージしました。次に、B はプル/マージして foo.c を取得し、他の変更をプッシュ/マージしました。プル後に B のリビジョンが 10 から 11 に変更されたとします。これで、ブランチ B のすべてが台無しになったので、B をリビジョン 10 に戻して、プルが発生しなかったと見なすようにします。

そのため、これらの投稿を調べて、次の手順で問題を解決する方法を見つけました。

  1. svnadmin ダンプ $(repo/B) -r 0:10 | svnadmin load $(newRepo/B)
  2. 今、元のレポURLを使用したいので:

    2.1) 混乱を防ぐためにバックアップします: svnadmin copy $(repo/B) $(repo/B_backup)

    2.2) 新規にコピー: svnadmin copy $(newRepo/B) $(repo/B);

  3. UUID を同じにしたいのですが、svn バージョンが 1.4 であるため、svnadmin setuuid がありません。そう:

    3.1) ステップ 1 の前に、元の UUID を記録する svn info $(repo/B)

    3.2) ステップ 2 の後、どこかで $(repo/B) のログを開き、元の UUID をそこにコピーします

$(repo/B) にはリビジョン 10 と同じ UUID があります。

私の質問は

  1. これがすべて完了した後、ブランチ A と C も変更されますか?

  2. もう一度台無しにしたくないという理由で、ソリューションに欠けているものはありますか? またはそうするより良い方法はありますか?

ありがとう

4

1 に答える 1

1

svnadminリポジトリ全体をダンプして復元するために使用する代わりに(!)、単にサブツリーを削除/コピーする必要があります。

C:\>svn delete -m "this version went bad" svn://server/repo/B

Committed revision 12.

C:\>svn copy -m "restore good version" svn://server/repo/B@10 svn://server/repo/B

Committed revision 13.

svnadmin通常、回避できる場合は使用しないでください。ブランチ/マージ/ロールバックなどの通常のソース管理操作ではなく、実際には管理タスク用です。

于 2013-05-17T02:29:27.553 に答える