Subversionである特定のリビジョンにあるファイルを取り出すには

カレンダーファイルをSubversionで管理しています。1年分のカレンダーを使ってもいいのですが、何かとカレンダーへ記録をしているので、カレンダークライアントの負荷を考慮して最近2ヶ月分の記録と、予定のカレンダーを用意しています。3ヶ月以上前の記録も残しておきたいので、それについては月ごとにカレンダーファイルにしてSubversionリポジトリへ保存しています。ここで問題がおきました。誤って2013年6月のカレンダーファイルの中身を空っぽにしてコミットしてしまいました。

でも、Subversionを使っているから復帰できます。もちろん正しい情報を過去に一度コミットしていないと復帰できません。今回はきちんとコミットしてあったので、次のような手順で復旧できました。ファイルの名前を201306.icsとしましょう。

  1. svn log でコミット履歴を確認
  2. 最後に正しいデータが残っていたらしいファイルをsvn catで表示
  3. 間違ったデータをコミットしたタイミングのファイルをsvn catで表示
  4. 正しいデータをsvn catで取得
  5. svn commitで正しいデータをコミット

具体的なコマンドは次のとおりです。svn log で r50 と r55 あたりの2回の更新があやしいとみて、それぞれのリビジョンのデータを確認しています。結果として、r50が正しく、その次にこのファイルを更新したr55が間違ったデータとなったことがわかりました。これをsvn catで復元してコミットをしなおしています。

$ svn log 201306.ics
$ svn cat -r 50 201306.ics
$ svn cat -r 55 201306.ics
$ svn cat -r 50 201306.ics > 201306.ics

いやぁ、便利便利。とはいえ、そろそろこういったファイルのリビジョン管理もgitへ移行しようとは思っています。来年かな。

Subversionについては下記書籍が参考になりそうです。

同じタグの記事: Subversion
同じカテゴリの記事: Linux