svn DB の復旧について

最新リビジョンのチェックアウトをしようと思ったら、次のようなエラーが出てしまいました

svn: Can't read file '/svn_repos/my_rep/db/revs/50': End of file found

まだ、大したデータは管理されていないとはいえ、今後開発がすすんで同じようなエラーが出た時のことを考えると
復旧方法を探しておいた方が安心できるってことで、ちょいと調べてみました.

結局やったこと

次のサイトを参考にさせていただきました.

http://www.spring-aki.com/archives/2006/08/svnerror.html

  • $repository/db/revs にある破損したリビジョン以降のリビジョンファイルを削除する
  • $repository/db/revprops にある1で削除したものと同じリビジョンファイルを削除する
  • $repository/db/current を編集して、破損したリビジョンに変更

丁度壊れているリビジョンが 51 の最新リビジョンだったので、以下のファイルを削除

  • $repository/db/revs/51
  • $repository/db/revprops/51

$repository/db/current をテキストエディタで開いて

51 ah j

と書いてあるところを

50 ah j

に編集して上書き.

svnX からリポジトリを開いてみると、なぜかリビジョン51が表示されていて

svn: No such revision 51

といったエラーが表示されてしまうが、リビジョン 50 を選択してチェックアウト、(適当なファイルを編集して)コミットを
行うと、新しい リビジョン 51 のログが表示される.

他に調べたこと

リポジトリDB が壊れた場合には、次のコマンドを試すものらしい.

svnadmin verify リポジトリに保存されているデータを検証します
svnadmin recover リポジトリデータベースを整合性のある状態へ修復します

例)

[user@host:~/Documents/sandbox]$ svnadmin verify file:///Documents/svn_repos/sandbox

おわりに

私は上記方法で復旧できたようですが、適切な復旧方法かは分かりませんので、試す際には自己責任でお願いします.