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が実行されるユーザーに対して実行権限を持たせておく必要がある。今回の場合は、ApacheのWebDAVと組み合わせて使用しているので、apacheユーザーの実行権限が必要である。
ログメッセージの変更時は、内部的にsvn revprepが実行されるが、この実行の前にpre-revprep-changeが実行される。WindowsのSubversionサーバーの場合には、pre-revprep-change.batというファイルが使われるそうだ。
pre-revprep-change.tmplの内容は、PROPNAMEが"svn:log"である場合のみ、正常終了、それ以外はエラーを返すというもの。ログ以外のメタデータが安易に書き換えられるのを防ぐ役割を持つのだろう。何でもOKにするなら、単に"exit 0"のみでOKなのだろう。
svnadmin setlogを使う方法が紹介されているサイトもあるが、これはちと危険なので使わない方がよいだろう。