Subversionで過去の思い出を完全抹消

Subversionは管理されたファイルなら追加や削除履歴やらを全て記録してくれてうっかりあやまって消してしまったファイルでも過去のリビジョンに戻って復活できます。それがいいところです。
ただ、うっかり機密文章とかライセンス違反のものをコミットしてしまった場合はそれは大変で消すのが難しい><オープンなレポジトリに突っ込んだ瞬間は真っ青です。そんな過去の汚点を完全抹消する方法。

とりあえず

  • コミッタ全員にコミットしてもらう(もらったほうがいいです。)
  • 後はレポジトリの公開一時停止。作業中にコミットされると整合がとれない為。

コマンド

例えばプロジェクトがFooで、/trunk/foo/yabai.docが完全抹消したいファイルだとすると以下のようなコマンド実行。1行目でdumpと同時に必要のないファイルを除去しているところ。dumpfileでその内容を出力。

svnadmin dump C:\foo | svndumpfilter exclude /trunk/foo/yabai.doc > dumpfile

続いて以下のコマンドで新しくFooを作成。次にdumpfileの内容をマージしているところ。

svnadmin create Foo
svnadmin load Foo < dumpfile

svndumpfilter excludeはいらないファイルやフォルダを削除するオプションで他にもincludeがあります。例えば他にも3つのプロジェクトを1つのリポジトリにしていたけどそれを後で3のリポジトリに分けることが可能っていうのがここら辺に書いてある(bluegate.org - )

というわけで

過去の嫌な記録もすっぱり削除と...。