Subversionレポジトリの特定のファイルを消す方法
Subversionのレポジトリに誤ってマズいファイルを追加してしまい、削除するという作業が発生したので、手順を簡単にメモ。マズいファイルを追加した直後に気づいたので、最初は最新リビジョンだけを削除できればいいかなと考えていたのだけど、ざっくり調べた感じでは、どうもSubversionには特定のリビジョンを消す機能は無いようで。
というわけで今回はsvnadminコマンドとsvndumpfilterコマンドを使って作業しました。手順としては、まず今あるレポジトリをsvnadminでダンプファイルに書き出す。書き出す際にsvndumpfilterを使ってマズいファイルを除外する。後は新しいレポジトリを作って、svnadminでダンプファイルから復元すれば作業は完了。レポジトリディレクトリをrepos、削除したいファイル名をsecret.txtとすると、実行手順は以下のようになります。
svnadmin dump repos/ | svndumpfilter exclude trunk/secret.txt > dump.txt
mv repos/ repos_old/
svnadmin create repos/
svnadmin load repos/ < dump.txt
まぁ、こんなことになる前に、レポジトリにファイルをコミットする時は、日常的に機密情報とかパスワードが含まれていないかをきちんと確認しましょうということで。