Subversionのコミット済みのログを修正する方法

いろんなプロジェクトのソース管理やドキュメント管理に、Subversionを使っている。ときどき、ログメッセージに誤字があったり、必要なコメントを入れ忘れて、後から修正をしたくなる事がある。

例えば、Windows上のSVNクライアントのTortoiseSVNでは、ログの一覧を表示させておいて、ログを修正したリビジョンで右クリック⇒ログメッセージを編集をすると、修正する事が出来る。ただし、通常のSubversionサーバー側の標準設定ではこの機能は使えない。

そこで、下記のようにrevprop前のフックを有効にしてやる。
(レポジトリのパスが /home/svnroot だと仮定)

# cd /home/svnroot/hooks
# cp -a pre-revprop-change.tmpl pre-revprep-change
# chmod +x pre-revprep-change

hooksディレクトリにある、*.tmplファイルはhookのテンプレートファイルであり、通常はtmplを削除したファイル名にコピーし、内容を修正して使用する。この際、svnが実行されるユーザーに対して実行権限を持たせておく必要がある。今回の場合は、ApacheWebDAVと組み合わせて使用しているので、apacheユーザーの実行権限が必要である。

ログメッセージの変更時は、内部的にsvn revprepが実行されるが、この実行の前にpre-revprep-changeが実行される。WindowsSubversionサーバーの場合には、pre-revprep-change.batというファイルが使われるそうだ。

pre-revprep-change.tmplの内容は、PROPNAMEが"svn:log"である場合のみ、正常終了、それ以外はエラーを返すというもの。ログ以外のメタデータが安易に書き換えられるのを防ぐ役割を持つのだろう。何でもOKにするなら、単に"exit 0"のみでOKなのだろう。

svnadmin setlogを使う方法が紹介されているサイトもあるが、これはちと危険なので使わない方がよいだろう。