svnのログメッセージを変更する
svnでうっかりログメッセージをtypoしてしまったりすることがある。ソース自体は問題がないのでもう一度修正コミットをするのも気が進まない。
そういうときのためかは知らないがメッセージを変更する機能はある。ただし前のメッセージが永久に消えてしまうため、クライアントのみではできない。リポジトリ側での操作が必要になる。
一度だけsvnadminで変更する場合
svnadminコマンドは操作に失敗すると取り返しがつかないので変更前にダンプかログを保存しておく。
cd /path/to/repo svnadmin setlog . -r REV NEW_MESSAGE_FILE --bypass-hooks
ファイル NEW_MESSAGE_FILE にメッセージを書く。標準入力からの読み込みはできない雰囲気だった。
pre-revprop-changeフック(後述)を設定していない場合は--bypass-hooks
が必要になる。
クライアントから変更できるようにする場合
度々修正する場合はクライアントから操作できるようにする。問題があるのはコミッターの方なのだが、そちらをfixできるとは限らないわけだ。
まずリポジトリ側を変更する。pre-revprop-changeフックを設定すればよい。用意されているテンプレートスクリプトが丁度ログ(svn:log)の変更のみを許可するようになっているので、これを使う。
cd /path/to/repo cp hooks/pre-revprop-change.tmpl hooks/pre-revprop-change
このままでは書き込み権限のあるユーザは誰でもログを変更できてしまう。
必要に応じてexit 0
しているif
行に-a "$USER" = "USER_NAME"
などを追加する。
-if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi +if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" -a "$USER" = "ichiro" ]; then exit 0; fi
フックスクリプト側で古いメッセージをどこかにダンプするのも良いかもしれない。
最後に実行権限を付けて有効化する。
chmod +x hooks/pre-revprop-change
あとはクライアント側で対象のリビジョン番号を確認して、新しいメッセージを設定する。
svn log -r REV # OLD MESSAGE svn propset -r REV --revprop svn:log "NEW MESSAGE" svn log -r REV # NEW MESSAGE