TortoiseSVNで自分専用コミットログのテンプレートを使用する


概要

TortoiseSVNでコミット時に入力するログ(コメント)に初期表示値を設定する方法です。
ただし、他の人には影響を与えないこととします。

なぜにWhy?

コミットログの初期値を設定する方法をググると、
サーバフックで実現するかプロパティを使うかのどちらかしか出てきません。

ただし、上記の方法では同じリポジトリを使う全ての人に影響を与えてしまいます。

普通の使い方をする場合はむしろその方が統一性があって都合が良いことでしょう。
ですが、そうは言っても簡単には全使用者にこのテンプレートで行きましょうと言えない場合もあるのではないでしょうか?

というわけで、自分だけにしか影響しない方法で実現したいと思います。

方法

結論から言うと、 クライアントフック を使用します。
フックとは、コミット等の処理が実行される際にあらかじめ用意していたスクリプトを実行する仕組みのことです。
通常はサーバ側に設定するものですが、TortoiseSVNにはクライアント側にも設定することができます。

フックスクリプトの作成

以下の通りスクリプトを作成します。

//=================================================================================================
//コマンドライン引数(パラメータ)の取得
//=================================================================================================
var objArgs = WScript.Arguments;
var num = objArgs.length;
if (num !== 3)
{
    WScript.Echo("Usage: [CScript | WScript] comment_template path/to/pathsfile path/to/messagefile path/to/CWD ");
    WScript.Quit(1);
}

var messageFilePath = objArgs(1);

//=================================================================================================
//実行部
//=================================================================================================
var objFso = WScript.CreateObject("ADODB.Stream");
objFso.Type = 2; // 1:バイナリ、2:テキスト
objFso.Charset = "UTF-8"; //SVNログメッセージはUTF8を使用する
objFso.Open();

// ここにログメッセージの初期設定値を書き込む(第2引数が1の場合は改行する)
objFso.WriteText("【】《課題番号:》 ", 1);
objFso.WriteText("", 0);

// BOMを除去する
objFso.Position = 0;
objFso.Type = 1;
objFso.Position = 3;
var bin = objFso.Read();
objFso.Close();

// 指定されたファイルに上書き保存する
objFso.Open();
objFso.Write(bin);
objFso.SaveToFile(messageFilePath, 2);
objFso.Close();

WScript.Quit(0);

ファイル名は「comment_template.js」とします。(任意の名前でも大丈夫です)

フックスクリプトの登録

TortoiseSVNの設定画面を表示します。
ツリーから「フックスクリプト」を選択します。
その後「追加」を押下します。

フックの種類は「Start Commit フック」を選択します。
作業コピーのパスはチェックアウトしたフォルダのパスを指定します。
実行するコマンドラインは「WScript {先ほど作成したスクリプトファイルのパス}」を指定します。
「スクリプトが終了するまで待機する」「実行時にはスクリプトを非表示にする」にチェックを付けます。
「OK」ボタンで登録完了です。

これでコミット時に初期値が表示されるようになります。