Subversion のプロパティは、 Windows のプロパティダイアログから確認したり設定したりできますが、他に → や → の TortoiseSVN の状態リストでも確認できます。
自分でプロパティを定義できるほか、 Subversion で特別な意味をもつプロパティを追加することもできます。これは svn:
で始まります。 svn:externals
もその一種です。外部参照の扱い方は 「外部項目」 をご覧ください。
Subversion は、ファイル自身にファイル名やリビジョン情報を埋め込む CVS 風のキーワード展開をサポートしています。現在、キーワードは次のものをサポートしています。
最後にコミットされた日時です。作業コピーに対して更新を実行した時点の情報に基づいています。それより新しい情報をリポジトリに確認することは ありません 。
最後にコミットを行ったリビジョンです。
最後にコミットを行ったユーザーです。
このファイルのリポジトリ上のフル URL です。
前述の4つのキーワードの短く組み合わせたものです。
以上のキーワードの使用法については、 Subversion book の svn:keywords section で、これらのキーワードの詳しい解説と、有効にする方法や使用する方法を説明をしています。
Subversion のプロパティに関する詳細情報は、Special Properties をご覧ください。
新しいプロパティを追加するには、まず 新規... をクリックしてください。メニューから必要なプロパティ名を選択し、プロパティダイアログに必要な情報を入力します。これらのプロパティダイアログの詳細は 「プロパティエディター」 をご覧ください。
独自のダイアログを持たないプロパティを追加するには、 新規... メニューの を選択します。そして、既存のプロパティをコンボボックスから選択するか、カスタムプロパティの名前を入力するかします。
一度にたくさんの項目に対してプロパティを設定する場合は、エクスプローラーでファイルやフォルダーを複数選択し、
→ を選択してください。現在のフォルダー以下にある すべての ファイルやフォルダーに対してプロパティを適用する場合、 プロパティを再帰的に適用する チェックボックスをチェックしてください。
既存のプロパティを編集する場合、プロパティの一覧から編集するプロパティを選択し、
をクリックしてください。既存のプロパティを削除したい場合、プロパティの一覧から削除するプロパティを選択し、
をクリックしてください。svn:externals
プロパティは、同じリポジトリからでも完全に異なるリポジトリからでも、他のプロジェクトを取得するのに使用できます。詳細は 「外部項目」 をご覧ください。
プロパティはバージョン管理されているため、以前のリビジョンのプロパティを編集することはできません。ログダイアログや、リポジトリブラウザー上で最新以外のリビジョンを表示している場合は、プロパティと値の一覧は見られますが、編集はできません。
しばしば、何度も同じプロパティのセット(例: bugtraq:logregex
)を適用していることに気付くでしょう。あるプロジェクトから別のプロジェクトへ、プロパティを簡単にコピーする場合は、エクスポート・インポート機能を使用できます。
すでにプロパティが設定されているファイルやフォルダーで、
→ を使用し、エクスポートしたいプロパティを選択して をクリックしてください。プロパティの名前と値を保存するファイル名を入力するよう促されます。プロパティを適用したいフォルダーで、
→ を実行し、 をクリックしてください。インポート元のファイル名を尋ねてきますので、先ほど保存したエクスポートファイルを指定してください。プロパティはそのフォルダーに、非再帰的に追加されます。プロパティをディレクトリ構造に対して再帰的に追加する場合は、前述の手順の後、プロパティダイアログでプロパティを選び、プロパティを再帰的に適用する チェックボックスをチェックした後、 をクリックしてください。
をクリックしてください。インポートファイルはバイナリで TortoiseSVN 専用です。インポートやエクスポートでのプロパティの受け渡し専用で、このファイルを編集する必要はありません。
TortoiseSVN は、ファイルを使用することでバイナリのプロパティ値を扱うことができます。バイナリプロパティ値を読むには、ファイルに
してください。バイナリ値を設定するには、バイナリエディター等の適切なツールを使用してファイルを作成し、そのファイルから としてください。バイナリプロパティはあまり使用されませんが、アプリケーションによっては便利です。例えば、巨大な画像ファイルを格納している場合や、アプリケーションが読み込むファイルが巨大な場合、プレビューを素早く得るのに、プロパティにサムネイルを格納した方が良いかもしれません。
ファイルやフォルダーをリポジトリに追加する際に、自動的にプロパティが設定されるように Subversion や TortoiseSVN を設定できます。これには2通りの方法があります。
Subversion の設定ファイルを編集すると、自分のクライアントでこの機能を有効にできます。 TortoiseSVN の設定ダイアログの全般ページに、直接そこに行くための編集ボタンがあります。設定ファイルは、 Subversion の動作を制御する単純なテキストファイルです。ここで2か所を変更する必要があります。1つめは、 miscellany
という見出しのセクションで、 enable-auto-props = yes
という行のコメントを解除します。2つめは、その下にある、どのファイル形式に、どのプロパティを追加するかを定義したセクションを編集します。この方法は Subversion の標準機能で、どの Subversion クライアントでも動作します。しかし、各クライアントでそれぞれ定義しなければなりません。つまり、この設定をリポジトリに伝播する方法はありません。
もうひとつの方法は、 tsvn:autoprops
プロパティをフォルダーに設定する方法で、次節で説明しています。この方法は、 TortoiseSVN クライアントでしか動作しませんが、更新を行った際に、すべての作業コピーに伝播します。
Subversion 1.8で、ルートフォルダーに svn:auto-props
プロパティが設定できるようになりました。プロパティの値が自動的にすべての子項目に継承されます。
どちらの方法を選択しても、 auto-props はファイルが作業コピーに追加された時にのみ適用されることに注意してください。 auto-props は、すでにバージョン管理下にあるファイルのプロパティを変更することはありません。
新しいファイルに正しいプロパティが確実に適用されるようにしたい場合は、リポジトリに pre-commit を設定して、必要なプロパティが設定されていないとコミットを拒否するようにするべきです。
Subversion のプロパティはバージョン管理されます。プロパティを変更したり追加したりした後は、変更をコミットする必要があります。
他のユーザーが同じプロパティを変更したりして、コミット時に競合が発生した場合、Subversion は .prej
ファイルを生成します。競合を解決した後にこのファイルを削除してください。
TortoiseSVN は自身が持つ特殊なプロパティをいくつか持っています。これは tsvn:
で始まります。
tsvn:logminsize
はコミット時に入力するログメッセージの長さの最小値を設定します。ここで指定した長さより短いメッセージを入力するとコミットできません。この機能はコミットごとに適切に説明するメッセージを入力するのを忘れないようにするのに便利です。このプロパティが設定されていなかったり、値が 0 に設定されていたりした場合、空のログメッセージが許可されます。
tsvn:lockmsgminsize
はロックメッセージの長さの最小値を設定します。ここで指定した長さより短いメッセージを入力するとロックできません。この機能はロックするごとに適切に説明するメッセージを入力するのを忘れないようにするのに便利です。このプロパティが設定されていなかったり、値が 0 に設定されていたりした場合、空のロックメッセージが許可されます。
tsvn:logwidthmarker
は、プロジェクトでログメッセージが行の最大長(通常 80 文字)以内にそろえたい場合に使用します。このプロパティが 0 以外に設定されていると、ログメッセージ入力ダイアログでは、入力したテキストが長すぎないかどうかを確認できるように最大長を示すマーカーが設置され、表示時のワードラップが無効になります。【注】この機能はログメッセージに固定長フォントを選択していないと、正しく動作しません。
tsvn:logtemplate
は、プロジェクトでログメッセージの整形ルールを指定したい場合に使用します。このプロパティは複数行の文字列を保持し、コミット時にコミットメッセージボックスにそれが挿入されます。これにより必要な情報を持つコミットメッセージを編集できます。【注】 tsvn:logminsize
を併用する場合、必ずテンプレートより長い値を設定してください。そうでなければ保護機構が働きません。
操作に固有のテンプレートを tsvn:logtemplate
の代わりに使用することもできます。操作に固有のテンプレートが設定されている場合はそれが使用されますが、操作に固有のテンプレートが設定されていない場合は、 tsvn:logtemplate
が使用されます。
操作に固有のテンプレートは次の通りです。
tsvn:logtemplatecommit
は作業コピーからのすべてのコミットに使用されます。
tsvn:logtemplatebranch
は、ブランチ/タグを作成する際、もしくはリポジトリブラウザーでファイルやフォルダーを直接コピーする際に使用されます。
tsvn:logtemplateimport
は、インポート時に使用されます。
tsvn:logtemplatedelete
は、リポジトリブラウザーで直接項目を削除する際に使用されます。
tsvn:logtemplatemove
は、リポジトリブラウザーで名前変更や項目の移動を行う際に使用されます。
tsvn:logtemplatemkdir
は、リポジトリブラウザーでディレクトリを作成する際に使用されます。
tsvn:logtemplatepropset
は、リポジトリブラウザーでプロパティを変更する際に使用されます。
tsvn:logtemplatelock
は、ロックを取得する際に使用されます。
新しくファイルの追加やインポートを行った際に、拡張子を元にプロパティを付加するように、 Subversion は 「autoprops」 を設定できます。これはクライアントごとに、 Subversion 設定ファイルに適切に autoprops が設定されているかどうかに依存します。tsvn:autoprops
をフォルダーに設定しておくと、インポートやファイル追加の際に、ユーザーのローカルに autoprops をマージするようになります。この形式は subversion の autoprops と同じで、.sh
拡張子を持つファイルに2つのプロパティを セットしたい場合は、*.sh = svn:eol-style=native;svn:executable
のようになります。
ローカルの autoprops と tsvn:autoprops
が競合する場合は、プロジェクトごとに指定されている、プロジェクト設定を優先します。
Subversion 1.8では、tsvn:autoprops
ではなくsvn:auto-props
をお使いください。これは二条に似た動作をしますが、TortoiseSVNに限らずすべてのSubversionクライアントで機能します。
コミットダイアログでは、変更したファイルをファイルごとに状態(追加、変更、など)込みで貼りつけるオプションがあります。tsvn:logfilelistenglish
は状態を英語で挿入するか、各国語で挿入するかを定義できます。このプロパティがセットされていなければ、デフォルトでは true
となります。
TortoiseSVN はスペルチェッカーを使用できます。Windows 10 では OS のスペルチェッカーが使用されます。それ以前のバージョンの Windows では、OpenOffice や Mozilla で使用されているスペルチェッカーモジュールを使用できます。もしもこれらがインストールされている場合、このプロパティーはどのスペルチェッカーを使用するか、すなわち、どの言語であなたのプロジェクトのログメッセージが書かれるかを決定します。tsvn:projectlanguage
は、あなたがログメッセージを入力する際にスペルチェックエンジンが使用すべき言語モジュールを設定します。こちらのページMSDN: Language Identifiesであなたの言語用の設定値を探すことができます。
この値を 10 進数や頭に 0x
を頭に付けた 16 進数で入力できます。たとえば、日本の場合はは0x0411
や 1041
を入力してください。
tsvn:logsummary
プロパティは、ログメッセージのサマリとしてログダイアログに表示する、ログメッセージの一部を抽出するのに使用します。
tsvn:logsummary
プロパティの値は、正規表現グループを含む正規表現文字列を、1 行で表したものでなければなりません。そのグループにマッチするものであれば、なんでもサマリとして扱います。
例: \[SUMMARY\]:\s+(.*)
は、ログメッセージ中の 「[SUMMARY]」 以降をすべてサマリとして扱います。
tsvn:logrevregex
プロパティには、ログメッセージにあるリビジョンの参照にマッチする正規表現を定義します。これはログダイアログで、リビジョンの参照をリンクにするのに使用します。このリンクをクリックすると、そのリビジョンまでスクロール(リビジョンがログダイアログにあるか、ログキャッシュにある場合)したり、そのリビジョンを表示する、新しいログダイアログを開いたりします。
正規表現は、リビジョン番号だけでなく参照全体にマッチしなければなりません。リビジョン番号はマッチした参照文字列から、自動的に抽出します。
このプロパティが設定されていない場合、リビジョン参照をリンクにする、デフォルト正規表現を使用します。
クライアント側フックスクリプトを設定するためのプロパティがいくつかあります。それぞれのプロパティが、特定の1種類のフックスクリプトに対応しています。
使用可能なプロパティ/フックスクリプトは、
です。
引数は、フックスクリプトを設定ダイアログで設定する場合と同じです。詳細は 「クライアント側フックスクリプト」 をご覧ください。
すべてのユーザーが、自分の作業コピーを同じ場所の同じ名前でチェックアウトしているとは限らないので、作業コピーの中にあるスクリプトやツールを実行するように指定する場合、代わりにリポジトリの URL で指定することができます。このとき %REPOROOT%
をリポジトリのルートを表す URL の一部として使用することができます。例えば、フックスクリプトが作業コピー内の contrib/hook-scripts/client-side/checkyear.js
の位置にある場合、スクリプトへのパスを %REPOROOT%/trunk/contrib/hook-scripts/client-side/checkyear.js
という形で指定することができます。こうすると、リポジトリを他のサーバーに移動した場合でも、フックスクリプトのプロパティを修正する必要がありません。
%REPOROOT%
の他に、 %REPOROOT+%
を指定することもできます。この +
はスクリプトを検索するのに必要なフォルダーのパスを複数含めるために使用されます。これは、ブランチを作成して作業コピーのURLが変わった時でもスクリプトを見つけられるようにしたい場合に便利です。上記のサンプルを使用すれば、スクリプトへのパスを %REPOROOT+%/contrib/hook-scripts/client-side/checkyear.js
と指定することができます。
下記のスクリーンショットは、ソースファイルのヘッダーにある現在の著作権表示の年をチェックするスクリプトを TortoiseSVN に設定する方法を示しています。
新しいプロパティを加える際に、コンボボックスから選択するか、任意のプロパティ名を入力できます。プロジェクトでカスタムプロパティを使用し、そのプロパティをコンボボックスに表示する(プロパティ名の入力ミスを防ぐ)場合、tsvn:userfileproperties
や tsvn:userdirproperties
でカスタムプロパティを作成できます。このプロパティはフォルダーに適用してください。そのフォルダー以下でファイルを作成すると、定義したプロパティ名ごとにカスタムプロパティを表示します。
ユーザー定義のプロパティを追加・編集するために使用されるカスタムダイアログを指定することができます。 TortoiseSVN はプロパティ型に合わせた4種類のダイアログを提供しています。
プロパティが true と false のように2つの値しか持たない場合、プロパティを bool
型にするとよいでしょう。
プロパティはこのように定義します。
propertyname=bool;labeltext(YESVALUE;NOVALUE;Checkboxtext)
labeltext
はダイアログ上でチェックボックスの上に表示される文字列で、このプロパティの使用目的を説明します。他の引数は見ての通りです。
プロパティが、たとえば はい、いいえ、おそらく
のように、いくつもの状態の中から1つを表す場合、プロパティを state
型にするとよいでしょう。
プロパティは次のように定義します。
propertyname=state;labeltext(DEFVAL;VAL1;TEXT1;VAL2;TEXT2;VAL3;TEXT3;...)
引数はbool
プロパティと同様ですが、DEFVAL
はプロパティが設定されていなかったり、値が設定されていなかったりした場合の既定値です。
値の数が3つまでの場合、ダイアログでは3つまでのラジオボタンで表示されます。それ以上の値がある場合、状態の値をユーザーが選択することができるコンボボックスが使用されます。
1行の文字列で成り立つプロパティには、 singleline
プロパティ型を使用してください。
propertyname=singleline;labeltext(regex)
regex
にはユーザーが入力した文字列を検証するために使用される正規表現を指定します。もし文字列が regex にマッチしない場合、ユーザーにはエラーが表示され、プロパティは設定されません。
複数行の文字列で成り立つプロパティには、 multiline
プロパティタイプを使用してください。
propertyname=multiline;labeltext(regex)
regex
にはユーザーが入力した文字列を検証するために使用される正規表現を指定します。正規表現には必ず改行(\n)を含めてください。
上記のスクリーンショットは、 tsvn:userdirproperties
に次の値を設定すると作成することができます。
my:boolprop=bool;これは bool 型のプロパティです。チェックを付けたり外したりできます。(true;false;my bool prop) my:stateprop1=state;これは state 型のプロパティです。2つの状態のうち1つを選択します。(true;true;true value;false;false value) my:stateprop2=state;これは state 型のプロパティです。3つの状態のうち1つを選択します。(maybe;true;正解;false;間違い;maybe;未回答) my:stateprop3=state;このプロパティに曜日を設定します。(1;1;月曜日;2;火曜日;3;水曜日;4;木曜日;5;金曜日;6;土曜日;7;日曜日) my:singlelineprop=singleline;短いコメントを入力してください。(.*) my:multilineprop=multiline;章全体をここにコピー&ペーストしてください。(.*)
TortoiseSVN はいくつかのバグ追跡ツールと統合できます。このとき bugtraq:
で始まるプロジェクトプロパティを使用します。詳細情報は 「バグ追跡ツール/課題追跡システムとの統合」 をご覧ください。
TortoiseSVN は、webviewer:
で始まるプロジェクトプロパティを使用して、いくつかの Web ベースのリポジトリブラウザーとも統合できます。詳細は 「Web ベースのリポジトリビューアーとの統合」 をご覧ください。
これらのプロパティは、作業するシステムのフォルダーに設定しなければなりません。これらのプロパティを使用する TortoiseSVN のコマンドを使用するときは、クリックしたフォルダーからプロパティが読み取られます。フォルダーにプロパティが設定されていない場合、プロパティはフォルダー階層を上位に向かって、バージョン管理外フォルダーか、ツリーのルート(例: C:\
)に到達するまで検索されます。すべてのユーザーが、例えば trunk/
からチェックアウトし、サブフォルダーからチェックアウトしないことが確認できるのであれば、 trunk/
にそのプロパティを設定するだけで充分です。確認できない場合、各サブフォルダーに対し再帰的にプロパティを設定するべきです。もしプロジェクトの異なる階層に、同じプロパティで異なる値を設定した場合は、クリックしたフォルダの階層に依存して結果が変わります。
プロジェクトプロパティ(例:tsvn:
、bugtraq:
、webviewer:
)に限っていえば、 プロパティを再帰的に適用する チェックボックスを使うと、そのフォルダ以下のすべてのサブフォルダーにプロパティを設定しますが、ファイルには設定しません。
TortoiseSVN で新しいサブフォルダーを作業コピーに追加する際、親フォルダーに設定されているプロジェクトプロパティは、新しいサブフォルダーにも自動的に追加されます。
リモートからプロパティを取得するのは時間がかかります。そのため、上記の機能のうちいくつかは、作業コピーで使用しているリポジトリブラウザーでは動作しません。
リポジトリブラウザーを使用してプロパティを追加する場合、標準的なliteral>svn:
リポジトリブラウザーを使用して、プロパティを再帰的に設定もしくは削除することは出来ません。
子階層のフォルダーがリポジトリブラウザーで追加された際に、プロジェクトのプロパティは自動で広まることはありません。
tsvn:autoprops
は、リポジトリブラウザーで追加されたファイル上のプロパティを設定しません。
TortoiseSVN のプロジェクトプロパティは非常に便利ですが、TortoiseSVN でしか動作せず、またいくつかは TortoiseSVN の新しいバージョンでしか動作しません。プロジェクトのメンバが様々な Subversion のクライアントを使用している場合や、古い TortoiseSVN しか持てない場合、プロジェクトポリシーを強制するのに、リポジトリフックを使用することになるでしょう。プロジェクトプロパティは、ポリシー実装の補助にしかならず、強制することはできません。
一部のプロパティは、自動処理に使用されるため、特定の値や特定の書式にする必要があります。正しい書式を設定やすくするため、 TortoiseSVN では幾つかの特定のプロパティについて、設定可能な値を表示したり、独立コンポーネントに分配したりするための編集ダイアログを提供しています。
svn:externals
プロパティは、同じリポジトリもしくは完全に異なるリポジトリから、他のプロジェクトを取得するのに使用できます。詳細は 「外部項目」 をご覧ください。
チェックアウトした外部フォルダーや、外部項目の Subversion の URL のサブフォルダーの名前を設定する必要があります。外部フォルダーの最新リビジョンをチェックアウトしておけば、外部項目がリポジトリの中で変更されたときに、作業コピーを更新させることができます。しかし、特定の安定した時点のものを外部で参照できるようにするには、使用する特定のリビジョンを指定することもできます。また、この場合、ペグリビジョンと同じリビジョンを指定したいかもしれません。外部項目が将来何らかの時点で改名されると、Subversionは作業コピーでこの項目を更新できなくなります。ペグリビジョンを指定することで、最新版ではなくペグリビジョンの時の名前をSubversionに検索させることができます。
を押すと、外部項目の各URLを確認し、右端の列に最新リビジョン表示されます。最新リビジョンが分かったら、外部項目の上で右クリックすると、選択された外部項目を該当する最新リビジョンにペグ付けできます。最新リビジョンが不明な場合、右クリックのコマンドを実行すると、まず最新リビジョンが取得されます。
これら3つのプロパティは、ログメッセージの書式を制御します。最初の2つを設定すると、コミットダイアログやロックダイアログで、メッセージが最小文字列の長さに達するまで ボタンが無効になります。境界の位置は、それらのログメッセージの幅制限が設定されているプロジェクトのためのガイドとして指定されたカラム幅でマーカーを示しています。値をゼロに設定すると、プロパティが削除されます。
コミットダイアログのログメッセージのスペルチェックに使用する言語を選択してください。右のログメッセージのペインでクリックして選択すると、ファイルリストのチェックボックスが有効になりますので、 ファイル名のリストを貼付 を選択してください。デフォルトでは Subversion の状態が、既定の言語で表示されます。このボックスがチェックされるとステータスが常に英語のみになります。英語のログメッセージを必要とするプロジェクトで有効です。
このプロパティは、作業コピーがロックされていない場合、ファイルを読み取り専用の状態でチェックアウトするかどうかを制御します。
このプロパティは、Unix / Linux システム上で、チェックアウト時にファイルに実行属性を付与するかどうかを指定します。これは、 Windows でチェックアウトする場合には影響しません。
リビジョンが作業コピーにマージされるたびに、TortoiseSVNはマージされた全リビジョンからログメッセージを作成します。コミットダイアログの
ボタンを押すと現れます。以下のプロパティを指定すると、作成されるメッセージをカスタマイズできます。
このプロパティは生成されるログメッセージの最初の部分になります。次のキーワードを使用することができます。
マージされたリビジョン番号のカンマ区切りのリスト(例えば、3, 5, 6, 7
)。
{revisions}
と同様だが、各リビジョンの前にr
が付く(例えば、r3, r5, r6, r7
)。
マージされたリビジョン番号のカンマ区切りのリストだが、可能な場合は範囲をグループ化する(例えば、3, 5-7
)。
マージのソースURL、すなわちリビジョンのマージ元の場所。
この文字列の既定値は「{mergeurl}からリビジョン{revrange}をマージ:
」で、最後に改行が入ります。
このプロパティはマージされた各リビジョンがどのように見えるかを定義します。次のキーワードを使用することができます。
マージされたリビジョンのログメッセージ(入力されたまま)。
{msg}
と同様だが、改行文字が空白に置き換えられ、ログメッセージ全体が1行で表現されたもの。
マージされたリビジョンの作者。
マージされたリビジョン番号。
マージされたリビジョンのバグID(もしあれば)。
この文字列はtsvn:mergelogtemplatetitle
またはtsvn:mergelogtemplatereversetitle
で指定されたタイトル文字列の位置を指定します。このプロパティをyes
またはtrue
に設定すると、タイトル文字列は冒頭ではなく末尾に追加されます。
これはマージされたリビジョンがすでにログキャッシュにある場合のみ動作します。もしログキャッシュを無効にしていたり、マージ前にログを表示していなかったりすると、メッセージにはマージされたリビジョンの情報が入りません。