Subversionでバージョン管理していると、コミットログを書きかけとか間違えた内容で書いてしまって、そのままコミットしてしまう事がよくあります。
「再編集できたらなあ」と思ってましたが、TortoiseSVNのメニューを見たら再編集できる事に気が付きました(知らなかった)ので、まずその経緯を。
TortoiseSVNでの操作
作業コピーディレクトリで右クリックして、「TortoiseSVN」→「ログを表示」とすると、「ログメッセージ」ウィンドウが表示されます。ここでコミットログを変更したいリビジョンを右クリックすると、下図のようなメニューが出てきます。
ここで「ログメッセージを編集」を選択すると、
と、元のメッセージが表示されるので、
と編集して「OK」を押します。
すると、とりあえずエラーダイアログが表示されて、失敗します。
Subversionリポジトリの設定
前述のエラーダイアログを見ると、「pre-revprop-change フックが機能不全であるか存在しない可能性が…」とあります。pre-revprop-change というのは、リポジトリに設定できるフックの1つで、「リビジョン属性の変更前に行う処理」の事です。
ちなみに「リビジョン属性」は、svn:author(コミットしたユーザー)
, svn:date(コミット日時)
, svn:log(コミットログ)
で、リビジョン毎にその属性があります。
要は、コミットログを編集したい場合はこのsvn:log
というリビジョン属性の内容を変更すればよいわけですが、デフォルトの状態では「リビジョン属性の変更前処理(pre-revprop-change)」が定義されていないので、出来ないという事のようです。
では、設定します。以下は、Subversionの管理者権限が必要です。
サーバーにログインして、当該リポジトリの配下を見ると、
<リポジトリルート>/hooksというディレクトリに、以下のようなファイルがあります。
-rw-r--r-- 1 apache apache 1411 Mar 19 14:52 post-commit.tmpl -rw-r--r-- 1 apache apache 1475 Mar 19 14:52 post-revprop-change.tmpl -rw-r--r-- 1 apache apache 2330 Mar 19 14:52 pre-commit.tmpl -rw-r--r-- 1 apache apache 1952 Mar 19 14:52 pre-revprop-change.tmpl -rw-r--r-- 1 apache apache 1533 Mar 19 14:52 start-commit.tmpl
この中のpre-revprop-change.tmplを見ると、
#!/bin/sh # PRE-REVPROP-CHANGE HOOK # # (以下、コメント部分は省略) REPOS="$1" REV="$2" USER="$3" PROPNAME="$4" if [ "$PROPNAME" = "svn:log" ]; then exit 0; fi exit 1
となっています。
なるほど…リビジョン属性の変更要求が来たら、Subversionはこの処理を実行して、
- 変更する内容がコミットログ(
svn:log
)だったら処理続行(exit 0
) - それ以外(ユーザー名の変更など)だったら処理中断(
exit 1
)
とりあえずこれはサンプルとして置いてあるファイルですが、今回の目的にはそのまま使えそうなので、単純にコピーします。
# cp pre-revprop-change.tmpl pre-revprop-change
# chown apache:apache pre-revprop-change
# chmod 744 pre-revprop-change
# ll
total 24
-rw-r--r-- 1 apache apache 1411 Mar 19 14:52 post-commit.tmpl
-rw-r--r-- 1 apache apache 1475 Mar 19 14:52 post-revprop-change.tmpl
-rw-r--r-- 1 apache apache 2330 Mar 19 14:52 pre-commit.tmpl
-rwxr--r-- 1 apache apache 1952 Mar 19 15:01 pre-revprop-change
-rw-r--r-- 1 apache apache 1952 Mar 19 14:52 pre-revprop-change.tmpl
-rw-r--r-- 1 apache apache 1533 Mar 19 14:52 start-commit.tmpl
これでTortoiseSVNから前記のような操作をすると、見事にコミットログが変更出来るようになりました。
このpre-revprop-changeの中身を見ると、引数にユーザー名も渡される($3
の部分)みたいなので、おそらくここに処理を追加すれば、コミットログの編集権限を特定ユーザーだけに与える事が出来るんじゃないかと思いますが、とりあえず今回は必要ないので、これで解決としました。
Subversionハンドブック (Handbookシリーズ) | |
ソフトバンククリエイティブ 2008-05-30 売り上げランキング : 151614 おすすめ平均 コンパクトで良いと思う。 名は体を表す Amazonで詳しく見る by G-Tools |