17

誰かが SVN サーバーへのコミットを台無しにしたという状況があります。大量のファイルが削除されたなど。

質問:前の (悪いコミットまでの) リビジョンを HEAD リビジョンにするテクニックは何ですか? 1 つのファイルに対してこれを行うための SO に関する議論をここで見ましたが、最後のコミットが発生しなかったようにしたいと考えています。何か案は?

これらの答えはすべて正しいようです。Tortoise SVNを使用していて、実際に使用した方法であるため、abatishchevの回答を正解としてマークしました。

4

5 に答える 5

19

最もクリーンな方法は、変更を元に戻すことです

svn merge を使用して、作業コピーの変更を「取り消し」、ローカルの変更をリポジトリにコミットできます。逆差分を指定するだけです。(これは、 を指定する--revision 303:302か、同等のを使用して実行できます--change -303。)

コミットがまだ履歴の一部であるという意味で、「最後のコミットが決して起こらなかったようにする」わけではないことは理解していますが、その悪いコミットを履歴に残しておく方がよいと思います。
新しい適切なコミットを簡単に作り直すために、照会/比較できる進行中の作業を含めることができます。


もしそれでも:

  • SVN (1.5) マニュアルには、obliterate情報を完全に削除するタスクを実行する将来のコマンドが記載されています。
  • 考えられる回避策として言及svndumpfilterしてください(パスベースのフィルターとして機能することにより、そのダンプファイルデータをすばやく簡単に変更する機能を提供するという点で)

…そもそもSCMツールを意図されていないものにねじ曲げようとしない方が良いです。
履歴化 (分岐による並列化と共に) は、SCM の 2 つの主な機能です。

于 2008-12-04T06:47:47.780 に答える
9

おそらく、ログを表示し、以前のリビジョン (n-1) を確認し、コンテキスト メニューで [このリビジョンに戻す] を選択して変更をコミットできます (n + 1 になります。n は現在の不良ヘッドです)。

于 2008-12-04T06:50:29.800 に答える
1

svnadmin dumpと を使用してこれを行うことができますsvnadmin load。それを行うのは非常に強引な方法ですが、それが唯一の方法だと思います。

この質問への回答が役立つ場合があります: Nuking huge file in svn repository

于 2008-12-04T06:42:57.960 に答える
0

特定のリビジョンを svn cp できるので、保存したい介入操作がない場合は、問題のあるディレクトリを svn rm してから、古いバージョンを svn cp できます。本のペグと手術の改訂セクションを参照してください

于 2008-12-04T06:53:55.677 に答える