Top > Blog > Tool

TortoiseSVNでSubversionのコミットログを再編集できるようにする

Subversionでバージョン管理していると、コミットログを書きかけとか間違えた内容で書いてしまって、そのままコミットしてしまう事がよくあります。
「再編集できたらなあ」と思ってましたが、TortoiseSVNのメニューを見たら再編集できる事に気が付きました(知らなかった)ので、まずその経緯を。

TortoiseSVNでの操作

作業コピーディレクトリで右クリックして、「TortoiseSVN」→「ログを表示」とすると、「ログメッセージ」ウィンドウが表示されます。ここでコミットログを変更したいリビジョンを右クリックすると、下図のようなメニューが出てきます。

「ログを表示」から当該リビジョンを右クリックした時のメニュー

ここで「ログメッセージを編集」を選択すると、

ログメッセージ編集ダイアログ1

と、元のメッセージが表示されるので、

ログメッセージ編集ダイアログ2

と編集して「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シリーズ)
Subversionハンドブック (Handbookシリーズ)
ソフトバンククリエイティブ 2008-05-30
売り上げランキング : 151614

おすすめ平均 star
starコンパクトで良いと思う。
star名は体を表す

Amazonで詳しく見る
by G-Tools

コメントの投稿