2

https://groups.google.com/forum/#!topic/visualsvn/2LpBN8qtEfMをフォローした後


以下の手順では、極端な場合に svn リポジトリ (fsfs バックエンド) への最後のコミットを「元に戻す」方法について説明します: (実際に適用する前に、環境内の「テスト」リポジトリで徹底的にテストしてください)$BAD_REV

  1. ビジュアル svn サーバーを停止します。
  2. すべてのリポジトリをバックアップします (不幸なシナリオが発生した場合に備えて)
  3. 「リポジトリ」フォルダに移動します。
  4. 最後のコミットを「元に戻す」必要がある特定のリポジトリを選択します。
  5. db/current を編集し、最初の数値を減らします。それがHEADリビジョンです。
  6. 消去db/rev/$BAD_REV
  7. 消去db/revprops/$BAD_REV
  8. ビジュアル svn サーバーを起動します。

注意: すべてのユーザーに、使用したチェックアウトを削除し、$BAD_REV ($BAD_REVマイナス 1) を使用して再度チェックアウトするよう依頼してください。


この手順の後の 2 回目のコミットの後、次のエラーが発生しました。

エラー コミットに失敗しました (詳細は次のとおりです):
エラー 破損した表現 '199 10142 111 1475 (null)
エラー d18718662872fab9aa981c20a47921768f567189 (null)

これを解決する方法がわからないので、新しいリポジトリを作成したくありません。

4

3 に答える 3

1

内部を手動で編集して、リポジトリを壊しました。実際、アリの手順は有害です。自分が何をしているのかを本当に理解していない限り、リポジトリの内部に触れてはいけません。このレポのバックアップがあることを願っています。

質問で参照しているスレッドを読みましたか? サイモンは、アリによって指定された手順を使用することを明示的に思いとどまらせます。

その手順を使用して最後のリビジョンを削除することはお勧めしません。Subversion リポジトリの構造は、見た目よりも複雑です。

通常、作業コピーの不要な変更を元に戻し、正しいリビジョンをコミットするだけです。リポジトリから最後のリビジョンを本当に削除する必要がある場合は、次の手順に従います。

  1. リポジトリのバックアップを作成します。

  2. 最後を除くすべてのリビジョンをダンプします。最終リビジョンが 10 であるとします。

    svnadmin.exe dump -r1:9 <repository path> > repo.dump.

  3. 新しいリポジトリを作成します。

  4. ダンプを新しいリポジトリにロードします。

    svnadmin.exe load <new repository path> < repo.dump.

バックアップがない場合、リポジトリを修復するための唯一の可能な解決策は、次の手順に従うことです。

  1. リポジトリのバックアップを作成し
  2. svnadmin verifyツールを使用してリポジトリを確認し、
  3. Windows エクスプローラーを起動し、<path-to-repository>\db\ディレクトリに移動します。
  4. ディレクトリからファイルを削除し、rep-cache.dbSubversion クライアント経由で再度アクセスしてみます (たとえば、変更をリポジトリにコミットしてみてください)。リポジトリが完全に壊れていない限り、役立つ場合があります。

    svnadmin dumpそれにもかかわらず、リポジトリのバックアップを復元し、svnadmin loadツールを使用する正しい手順に従うことを強くお勧めします。

于 2014-06-23T11:56:38.457 に答える
0

svnadminツールを使用してsvnリポジトリをあるサーバーから別のサーバーに移動しているときに、まったく同じ問題が発生しました。

私がしたことは、作成した新しいリポジトリを削除し、UUIDを強制せずに再度インポートしたことです。

後でsvnadmin setuuid [some id]で UUID を設定できます

于 2017-07-03T12:56:00.230 に答える