目次
もし、この本を章ごとに、最初から最後まで読んでいるのなら、 もうあなたは、ほとんどのバージョン管理操作を実行するために Subversionクライアントを使うための十分な知識を持っているはずです。 どのようにして、Subversionリポジトリから作業コピーをチェックアウト するかを理解しているはずです。svn commit や svn updateを使った変更点の送受信になじんでいる はずです。そして多分、ほとんど無意識にsvn status を実行してしまうような反射神経さえ身についているかも知れません。 どんな意図や目的に対しても、典型的な環境でSubversionを使う用意が できているはずです。
しかし、Subversionの機能セットは、「普通のバージョン管理操作」 で終わるわけではありません。
この章ではいくつかのSubversionの機能で、それほど頻繁には利用されない ようなものをとりあげます。その中で、Subversionの属性(あるいは 「メタデータ」)のサポートについて議論し、どのようにして Subversionのデフォルトの振る舞いを実行時設定領域の調整によって変更 することができるかを見ます。また、どのように外部定義を使って、 複数のリポジトリからデータを引っぱってくるようにSubversionに命令 するかを説明します。そして、Subversionのパッケージの一部である、 追加のクライアント側、サーバ側のツールのいくつかの詳細にも触れます。
この章を読む前に、Subversionで基本的なファイルとディレクトリに関する バージョン管理の能力についてなじんでいるべきです。もしまだそれについて は読んでいないか、復習が必要なら、章 2. 基本概念 と 章 3. 同伴ツアー を読むことをお勧めします。 一度基本をマスターしてからこの章を消化すれば、あなたはもうSubversion のパワーユーザです。
Subversionはたくさんのオプションの振る舞いを用意していて、それはユーザに よって制御することができます。そのようなオプションの多くはユーザがすべての Subversion操作に適用したいと思うようなことです。それで、このようなオプション を指定するためにユーザにコマンドライン引数を思い出させるように強いるよりも また、実行しようとするすべての操作に対してそれらを使うよりも、Subversionは 定義ファイルを使います。それはSubversionの定義領域に分離されているものです。
Subversionの設定領域 は二層に分かれたオプション名と 値の階層です。普通、これは定義ファイル (最初の 層)を含む特別なディレクトリに要約してあり、それは標準的なINI形式の テキストファイルにすぎません。(そこには「sections」 があり、 それが第二層になります)これらのファイルは好きなテキストエディタを 使って簡単に編集することができます。(emacs とか vi とか) そして、クライアント によって読み出される命令を含んでいて、ユーザが好むさまざまなオプションの 振る舞いをどうするかを決定します。
svnコマンドラインクライアントが最初に実行されると、
それはユーザごとの構成領域を作ります。Unix風のシステムなら、この領域は
ユーザのホームディレクトリに、.subversion
という名前の
ディレクトリとして用意されます。Win32システムでは、Subversionは
Subversion
という名前のフォルダを作ります。普通には
ユーザプロファイルディレクトリ(これは通常は隠れたディレクトリになりますが)
のApplication Data
領域
の内部になります。しかし、このプラットフォームでは、完全な場所はシステム
ごとに違っていて、本当の場所はWindowsレジストリ
[28]
に設定されています。
ユーザごとの設定領域は、Unix での名前である.subversion
を使って参照することにします。
ユーザごとの設定領域に加えて、Subversionはシステム全体の設定領域も
理解することができます。これはシステム管理者にあるマシン上での
すべてのユーザに対するデフォルトを設定する力を与えます。システム全体
の設定領域は必須のポリシーがあるわけではありません—ユーザ
ごとの設定領域は、システム全体の領域を上書きし、svn
プログラムに与えるコマンドライン引数は振る舞いを決める最後の場所に
なります。Unix風のプラットフォームでは、システム全体の設定領域は
/etc/subversion
ディレクトリにあると期待されて
います。Windows マシンの場合は共通アプリケーション データ
領域の内部にある
Subversion
ディレクトリを見に行きます
(このディレクトリもWindows レジストリによって指定されます)。
ユーザごとの場合と違って、svn プログラムは
システム全体の設定領域を作ろうとはしません。
.subversion
ディレクトリは現在のところ
三つのファイルを含んでいます—二つの設定ファイル
(config
と
servers
です)、それに
README.txt
ファイルで、これはINI形式を
説明するものです。それらの生成時には、ファイルはSubversion
がサポートするそれぞれのオプションのデフォルト値が入っており、
ほとんどがコメントアウトされていて、さらに、どのようにキーに対する
値がSubversionの振る舞いに影響するかということについて、テキストの
説明付きでグループ化されています。何かの振る舞いを変えるためには
関連する設定ファイルをテキストエディタで開き、必要なオプション値で
修正することだけが必要です。
もし設定をデフォルトに戻したい場合は、いつでも単にその設定ディレクトリを
削除し、何か無害なsvnコマンド、たとえば
svn --versionのようなものを実行することができます。
新しい設定用ディレクトリがデフォルト値を含む形で生成されます。
ユーザごとの設定領域は認証データのキャッシュも含みます。auth
ディレクトリは Subversionでサポートされているさまざまな認証方法で利用される
キャッシュ情報の要素を含むサブディレクトリの集まりを保持します。
このディレクトリはユーザ自身だけがその内容を読むことができるような形に
作成されます。
普通の INIベースの設定領域に加えて、Windowsプラットフォーム上で実行されて いるSubversionクライアントはWindowsのレジストリも設定データを格納する場所 として利用することができます。オプション名とその値は INIファイル中と同じ です。「file/section」 の階層関係も保存されます。わずかに異なる 方法によりますが—この方法では、ファイルとセクションは単にレジストリ キーのツリーの階層にしかすぎません。
Subversionはシステム全体の設定値を
HKEY_LOCAL_MACHINE¥Software¥Tigris.org¥Subversion
キー
の元で検索します。たとえばglobal-ignores
オプション、
これはconfig
ファイルのmiscellany
セクションにありますが、HKEY_LOCAL_MACHINE¥Software¥Tigris.org¥Subversion¥Config¥Miscellany¥global-ignores
に見つけることができます。
ユーザごとの設定値は
HKEY_CURRENT_USER¥Software¥Tigris.org¥Subversion
.
の下に格納されるはずです。
レジストリベースの設定オプションは、ファイルベースの残りの部分を 検索する前に 検索されます。それで、 このようなオプションは、設定ファイル中で見つかった値によって上書き されます。言い換えると、設定のプライオリティは Windowsシステムの 場合、以下の順序となることが保証されています:
コマンドラインオプション
ユーザごとのINIファイル
ユーザごとのレジストリ値
システム全体のINIファイル
システム全体のレジストリ値
また、Windowsレジストリは「コメントアウト」
のような概念をサポートしていません。しかし、Subversionは、
キーの名前がハッシュ文字(#
) で始まるような
すべてのオプションを無視します。これで実際にはSubversionのオプション
を、レジストリから完全にキーを消さずにコメントアウトすることができます。
明らかに、そのオプションの設定作業は簡単にしています。
svn コマンドラインクライアントはWindowsの
レジストリに書き込むことは決してありませんし、そこに
デフォルトの設定値を作ろうともしません。必要なキーは
REGEDITプログラムで作ることができます。他の方法
としては、.reg
ファイルを作り、エクスプローラ
シェルからそのファイルをダブルクリックすると、そのデータが
レジストリにマージされます。
例 7.1. レジストリエントリ(.reg) ファイルの例
REGEDIT4 [HKEY_LOCAL_MACHINE¥Software¥Tigris.org¥Subversion¥Servers¥groups] [HKEY_LOCAL_MACHINE¥Software¥Tigris.org¥Subversion¥Servers¥global] "#http-proxy-host"="" "#http-proxy-port"="" "#http-proxy-username"="" "#http-proxy-password"="" "#http-proxy-exceptions"="" "#http-timeout"="0" "#http-compression"="yes" "#neon-debug-mask"="" "#ssl-authority-files"="" "#ssl-trust-default-ca"="" "#ssl-client-cert-file"="" "#ssl-client-cert-password"="" [HKEY_CURRENT_USER¥Software¥Tigris.org¥Subversion¥Config¥auth] "#store-auth-creds"="no" [HKEY_CURRENT_USER¥Software¥Tigris.org¥Subversion¥Config¥helpers] "#editor-cmd"="notepad" "#diff-cmd"="" "#diff3-cmd"="" "#diff3-has-program-arg"="" [HKEY_CURRENT_USER¥Software¥Tigris.org¥Subversion¥Config¥miscellany] "#global-ignores"="*.o *.lo *.la #*# .*.rej *.rej .*‾ *‾ .#* .DS_Store" "#log-encoding"="" "#use-commit-times"="" "#template-root"="" "#enable-auto-props"="" [HKEY_CURRENT_USER¥Software¥Tigris.org¥Subversion¥Config¥tunnels] [HKEY_CURRENT_USER¥Software¥Tigris.org¥Subversion¥Config¥auto-props]
この例は、.reg
の内容を示した例ですが、その
中には、よく利用される設定オプションの大部分とそのデフォルト値が
あります。システムの設定(たとえばネットワークプロキシに関するオプション)
と、ユーザごとの設定(利用するエディタ、パスワード、など)の両方が
あることに注意してください。さらにすべてのオプションは、コメントアウト
されていることにも注意してください。オプション名の先頭のハッシュ文字
(#
) を取り除くだけで、望んでいる値に設定することが
できます。
この章では、特定の実行時オプションについて議論します。現在Subversion がサポートしているものについてです。
servers
ファイルはSubversionの設定オプションで、
ネットワーク層に関係したものを含んでいます。二つのセクション名がその
ファイルにはあります—groups
とglobal
です。groups
セクションは、要するにクロスリファレンスの
テーブルです。このセクションのキーは、ファイル中にある別のセクションの名前
です。その値はグロブ—ワイルドカードを含んで
いるかも知れないテキストトークンです—で、Subversionの要求が送信
されるマシンのホスト名称と比較されます。
[groups] beanie-babies = *.red-bean.com collabnet = svn.collab.net [beanie-babies] … [collabnet] …
Subversionがネットワーク越しに利用される場合、groups
セクションにあるグループ名に合うサーバ名称とマッチするものを探します。
もしマッチした場合はSubversionは次に、その名前がグループ名称とマッチした
servers
ファイル中のセクションを探します。そして
そのセクションから実際のネットワーク設定オプションを読み出します。
global
セクションはgroups
セクション
のどのグロブにも当てはまらなかったすべてのサーバに対する
設定があります。このセクションで使えるオプションは、ファイルの別の
サーバセクションで利用できるものとまったく同じです。(ただし、
もちろん、groups
セクションは例外です)
以下のような感じです:
http-proxy-host
これは、プロキシコンピュータのホスト名称で、HTTPベースのSubversion はそこを通じて通信しなくてはなりません。デフォルトは空で、それは Subversionはプロキシを通してHTTP要求せず、直接、目的のマシンと 通信しようとすることを意味しています。
http-proxy-port
これは、利用するプロキシホストのポート番号を指定します。 デフォルトは空です。
http-proxy-username
これは、プロキシマシンで必要なユーザ名を指定します。 デフォルトは空です。
http-proxy-password
これは、プロキシマシンで必要なパスワードを指定します。 デフォルトは空です。
http-timeout
これはサーバ応答を待つ時間の最大値を秒単位で指定します。
もし、Subversionの操作がタイムアウトしてしまうような低速の
ネットワーク接続に関係した問題を抱えている場合、この
オプションの値を増やしてみてください。デフォルト値は
0
で、この場合、HTTPライブラリである
Neonにデフォルトのタイムアウト値を使うように指示します。
http-compression
これは、DAVが有効なサーバで、Subversionがネットワーク要求データを
圧縮するかどうかを指定します。デフォルト値はyes
(ただし、圧縮はネットワーク層のコンパイル時に有効になっていなくては
なりませんが、)です。no
に設定すると圧縮は
無効になりますが、これはネットワーク転送のデバッグ時などに使います。
neon-debug-mask
これは、整数値のマスクで、HTTPライブラリNeon がどのようなタイプの
デバック出力を生成するかを指定するものです。デフォルトは
0
で、すべてデバッグ出力を無効にします。Subversion
がNeonをどのように使うかについての詳細は
章 8. 開発者の情報を見てください。
ssl-authority-file
これは HTTPS 経由でリポジトリにアクセスするときに Subversion クライアントによって受け入れられる認証機関(あるいは CA)の 証明書を含むファイルパスのリストをセミコロンで区切ったものになります。
ssl-trust-default-ca
Subversion が自動的に OpenSSL に付いているデフォルトのCA を信用する
ようにしたい場合にはこの変数をyes
にしてください。
ssl-client-cert-file
ホスト(あるいは何台かのホスト)が SSL クライアント証明書を要求する場合 普通は証明書のあるパスを入力するようにユーザにうながします。そのパスを この変数に設定すると Subversion はユーザの入力なしにクライアント証明書 を自動的に探すことができるようになります。証明書をディスク上に保存する ための標準的な場所はありません; Subversion は指定したどのようなパスから でもそれを取得することができます。
ssl-client-cert-password
SSL クライアント証明書ファイルがパスフレーズで暗号化されている場合
Subversion はその証明書を利用するたびにパスフレーズの入力を求めます。
これが嫌なら(そしてservers
ファイル中に
自分のパスワードを保存するのが嫌でなけれぱ)、この変数に証明書の
パスフレーズを設定することができます。これでパスフレーズを聞かれる
ことはなくなります。
config
ファイルは、Subversion実行時
オプションのうち、現在利用できる残りのもので、ネットワークに
関連するもの以外が含まれています。現時点ではいくつかのオプション
が利用できるだけですが、今後の追加を考えて、別のセクションとして
グループ化してあります。
auth
セクションはSubversionのリポジトリに対する
認証と許可に関係した設定があります。それは:
store-passwords
これはSubversionにサーバ認証チャレンジに対してユーザが
入力するパスワードをキャッシュするかどうかを指示します。
デフォルトはyes
です。no
に
設定するとディスク上でのパスワードのキャッシュを無効にします。
このオプションはsvn コマンドインスタンスのどれか
で--no-auth-cache
を使うと上書きすることができます。
(あるいはこの引数をサポートしているコマンドであればどれでも)。
詳細はクライアント証明のキャッシュ項を参照してください。
store-auth-creds
この設定は store-passwords
と同じですが、ディスク上
にキャッシュする すべての認証情報を有効にしたり
無効にするところが違います。このような情報にはユーザ名、パスワード
サーバ証明書、その他のキャッシュ可能な認証情報すべてが含まれます。
helpers
セクションはSubversionがどの
外部アプリケーションをいくつかの処理で使うかを制御します。
このセクションで有効なものは:
editor-cmd
これはSubversionがコミット時のログメッセージを作るのにどのプログラムを
使うかを指定します。たとえば、svn commit が、
--message
(-m
)も
--file
(-F
) オプション
もなしで実行されたような場合です。このプログラムはまたsvn
propeditコマンドでも使います—一時的なファイルに
ユーザが編集したいと思う現在の属性値が書き込まれますが、これは
エディタの起動によって実行されます。(属性項
参照)。このオプションはデフォルトは空です。もしこのオプションが設定
されていないとSubversionは環境変数
SVN_EDITOR
,
VISUAL
, と
EDITOR
(この順序で)
を調べます。
diff-cmd
これは差分表示プログラムの絶対パスを指定します。このプログラムは Subversionが 「diff」 の出力を生成するのに利用 されるものです( svn diff コマンド実行時 などです)。デフォルトで Subversion は内部的な差分ライブラリを 利用します—このオプションによって外部プログラムを使って 処理するようになります。そのようなプログラムの使い方の詳細は 外部差分ツールの利用項を見てください。
diff3-cmd
これはスリーウェイ差分プログラムの絶対パスを指定します。Subversion はこのプログラムをリポジトリから受け取った、ユーザがした変更点を マージするのに使います。デフォルトで Subversion は内部的な差分 ライブラリを利用します—このオプションを設定すると、外部プログラムを 使って処理を実行するようになります。そのようなプログラムの使い方の 詳細は 外部差分ツールの利用項 を見てください。
diff3-has-program-arg
このフラグはdiff3-cmd
オプションが
--diff-program
パラメータを受け付ける場合には
true
を指定すべきです。
tunnels
セクションでは svnserve
とsvn://
クライアント接続を使った新しいトンネルスキーマを定義する
ことができます。詳細はSSH 認証と認可項を参照してください。
miscellany
セクションは他の場所に置けない
すべてのものの置き場所です。
[29]
このセクションには:
global-ignores
svn statusコマンドを実行するとSubversionは
バージョン化されないファイルとディレクトリをバージョン化されて
いるものと一緒に一覧表示します。このときバージョン化されていない
ことを?
文字で表現します。
(svn status項参照)。
ときどき、あまり興味のないバージョン化されないアイテムが表示されるのを
見るのを面倒に思うことがあります。
—たとえば、プログラムのコンパイルによってできるオブジェクトファイル
など—
global-ignores
オプションは空白で区切られたグロブの
リストで、バージョン化されていないのであればSubversionに表示して欲しく
ないものの名前の指定になります。デフォルトは
*.o *.lo *.la #*# .*.rej *.rej .*‾ *‾ .#* .DS_Store
です。
svn status のほか、
svn add、svn import
コマンドもリストにマッチするファイルを無視します。
どのコマンドでも--no-ignore
フラグを使うとこのオプションをその実行に限って上書きできます。
無視するアイテムについてのもっと細かい制御については
svn:ignore
項を見てください。
enable-auto-props
これは Subversion に新規追加またはインポートしたファイルの属性を
自動的に設定するように指示します。デフォルト値はno
なので有効にするにはyes
にしてください。
このファイルのauto-props
セクションはどの属性が
どのファイル上に設定されるかを指定します。
log-encoding
この変数はログメッセージをコミットするキャラクタセットのデフォルト
エンコーディングを設定します。これは --encoding
オプションを無条件に有効にするものです( svn のスイッチ項
参照)。Subversion リポジトリはログメッセージを UTF8 で保存し、あなたの
ログメッセージはあなたのオペレーティングシステムの独自のロカールを使って
書き込まれることを仮定しています。他のエンコーディングで書いたメッセージ
をコミットしたい場合には別のエンコーディングを指定すべきです。
use-commit-times
通常作業コピーのファイルはどんな操作をしたかにかかわらず最後に触った 時刻を反映したタイムスタンプを持ちます。これはエディタで編集したか、 他のsvnサブコマンドを使ったかにはよりません。 これは普通はソフトウェア開発者にとって便利なものですが、それは ビルドシステムはよくどのファイルが再コンパイルを必要としているか を決めるのにタイムスタンプを見るためです。
しかし別の状況ではリポジトリで変更された最終時刻を反映しているような
タイムスタンプが作業ファイルに振られているほうが便利であることも
あります。 svn exportコマンドは常に、このような
抽出したツリー上の 「最終コミット時間」 を振りますが、この設定変数を
yes
にすると、svn
checkout, svn update,
svn switch, そして svn
revertについても同様に、それらの操作が
触れたファイルに最終コミット時間を振るようになります。
auto-props
セクションは Subversion クライアントが追加
またはインポートしたファイルの属性を自動的に設定する能力を制御します。
そこには PATTERN = PROPNAME=PROPVALUE
の形をした
任意数のキー・属性値の組を置くことができますが、ここでPATTERN
はファイル名称にマッチするような正規表現で、行の残りの部分は対応する属性と
その値です。ファイルに複数の要素がマッチすれば、そのファイルに複数の属性が
設定されることになります; しかし設定ファイル中に列挙された auto-props が
その順序で適用されるかどうかの保証はないので一つの規則で別の規則を
「上書き」することはできません。config
ファイル中に、auto-props を使ったさまざまな例を見つけることができる
でしょう。最後に、auto-props を有効にするにはenable-auto-props
をyes
にするのを忘れずに。