33

リポジトリフォルダーに一連のコミットがあるとします...

123 (250 new files, 137 changed files, 14 deleted files)
122 (150 changed files)
121 (renamed folder)
120 (90 changed files)
119 (115 changed files, 14 deleted files, 12 added files)
118 (113 changed files)
117 (10 changed files)

リビジョン 117 以降のすべての変更を含み、リビジョン 118 および 120 の変更を含まない作業コピーを取得したいと考えています。

編集: おそらく問題をより明確にするために、118 と 120 で行われた変更を元に戻し、他のすべての変更を保持したいと考えています。このフォルダーには、数百のサブフォルダーに数千のファイルが含まれています。

これを達成するための最良の方法は何ですか?

ブルーノとバートのおかげで、答えはコマンドです(この場合、完全なマージが実行された後に 120 を削除するため)

svn merge -c -120 .

リビジョン番号は先頭にマイナスを付けて指定する必要があることに注意してください。「120」ではなく「-120」

4

3 に答える 3

36

リビジョン 118 と 120 を取り消すには:

svn up -r HEAD       # get latest revision
svn merge -c -120 .  # undo revision 120
svn merge -c -118 .  # undo revision 118
svn commit           # after solving problems (if any)

変更の取り消しの説明も参照してください。

-c -120引数のマイナスに注意してください。(-cまたは--change) スイッチは Subversion 1.4 以降でサポートされており、古いバージョンでは を使用できます-r 120:119

于 2008-09-24T10:34:52.727 に答える
8

Subversion の Windows クライアントである TortoiseSVN を使用する場合は、より簡単な方法があります。クリックして更新された作業コピーのログを表示し、元に戻すリビジョンを選択して右クリックし、[これらのリビジョンからの変更を元に戻す] を選択します。

変更はワークスペースにのみ適用されるため、安全な操作です。リポジトリを変更するには、まだコミットする必要があります。

これは TortoiseSVN の優れた機能の 1 つです。私はずっとコマンド ライン派でしたが、Tortoise で考えが変わりました。

于 2008-09-27T06:41:58.990 に答える
-2

リビジョン 117 からブランチを作成し、118 と 120 を除くすべてをマージできると思います。

svn copy -r 117 source destination

次に、このブランチをチェックアウトして、そこから実行しますsvnmerge.py merge -r119,120-123

編集:これは、ブランチ/トランクのリビジョンを元に戻しません。svn merge代わりに使用してください。

于 2008-09-24T10:14:14.197 に答える