無視するファイルとディレクトリ

図 5.27. バージョン管理外のファイルでのエクスプローラコンテキストメニュー

バージョン管理外のファイルでのエクスプローラコンテキストメニュー


ほとんどのプロジェクトで、バージョン管理下にあるべきでないファイルやフォルダがあることでしょう。コンパイラが作成したファイル、*.obj, *.lst や、もしかしたら実行ファイルを格納する出力フォルダもそうでしょう。変更をコミットの際、TortoiseSVN はコミットダイアログにバージョン管理外のファイルを表示します。もちろんこの表示を off にできますが、そうすると、新しいソースファイルの追加を忘れるかもしれません。

こういった問題を避ける最良の方法は、プロジェクトの無視リストに、派生ファイルを追加することです。この方法だと、派生ファイルがコミットダイアログに現れなくなりますが、本当にバージョン管理外のファイルは現れるままになります。

バージョン管理外のファイルで 右クリック し、コンテキストメニューでTortoiseSVN無視リストに追加 コマンドを選択すると、選択したファイルのみか、同じ拡張子を持つファイルすべてかを選択するサブメニューを表示します。複数のファイルを選択すると、サブメニューを表示せず、指定したファイル・フォルダを追加します。

無視リストから項目を削除したい場合、その項目で 右クリック し、TortoiseSVN無視リストから削除 を選択してください。フォルダの svn:ignore 属性に直接アクセスすることもできます。これにより、ファイル名展開にもっと一般的なパターンが指定ができます。属性を直接指定することについては、プロジェクト設定項 をご覧ください。無視パターンは行ごとに区切らなければならないことをご承知おきください。空白で区切ったパターンは動作しません。

共通無視リスト

ファイルを無視する別の方法は、共通無視リスト に追加することです。共通無視リストはクライアントの属性ということが、大きく違います。これは Subversion プロジェクトに適用されますが、クライアント PC でしか適用されません。一般的には、可能なら svn:ignore 属性を使用する方がよいです。指定したプロジェクトエリアで適用され、プロジェクトをチェックアウトした人すべてに適用されるからです。詳細は 一般設定項 をご覧ください。

バージョン管理下項目の無視

バージョン管理下のファイルやフォルダは無視できません。これは Subversion の機能です。間違えてバージョン管理下に入れてしまった場合は、バージョン管理外のファイルの無視項 にある、「バージョン管理外」にする方法をご覧ください。

無視リストでのパターンマッチ

Subversion の無視パターンは、ファイル名展開を使用できます。これは本来 Unix でファイルを指定するのにメタキャラクタをワイルドカードとして使用するテクニックです。以下の文字が特別な意味を持ちます。

*

空文字列 (文字なし) を含む任意の文字列にマッチします。

?

任意の 1 文字にマッチします。

[...]

角かっこで囲まれた一文字にマッチします。かっこ内にある 「-」 で繋がった 2 つの文字は、辞書的にその 2 つの文字の間にある文字にマッチします。例えば、[AGm-p]A, G, m, n, o, p のいずれかにマッチします。

Subversion は、内部のパス名すべてで、パス区切り文字に / を使用し、パス名のパターンマッチすべてをこの形で行います。無視パターンにパス区切り文字を使用する場合、必ず / を使用し、Windows の ¥ を使用しないでください。

パターンマッチは大文字小文字を区別しますが、これは Windows で問題の原因になるかもしれません。両方指定すれば、強制的に大文字小文字を区別しないようにできます。例えば、大文字小文字に関わらず *.tmp を無視するには、*.[Tt][Mm][Pp] といったパターンで指定できます。

Subversion は上記のパターンマッチを、アクションで与えられたパスすべてに対して行います。このパスは一般的に、インポート・追加・コミットなどで実行されるディレクトリに関係します。そのためパターンマッチは、ファイル名の前にパス部分がある可能性を考慮しなければなりません。

パスにディレクトリ名が含まれる場合、マッチングアルゴリズムはこれを取り除きません。つまり、パターン Fred.*Fred.c にはマッチしますが、subdir/Fred.c にはマッチしません。無視したいファイルを含むフォルダを追加する場合、Subversionが無視パターンと比較する際に、そのファイル名の前にはフォルダ名がありますので、上記は重要な問題になります。

文字 / はパターンマッチにおいて特別扱いしません。そのため、abc*xyz は、abcdxyz だけでなく abcdir/subdir/anything/morexyz にもマッチします。

CVS フォルダをすべて無視するには、*CVS か、よりよい CVS */CVS といったパターンで指定してください。最初の設定では、ThisIsNotCVS も除外されてしまうでしょう。*/CVS だけでは、直接 CVS フォルダで動作しませんし、CVS だけではサブフォルダで動作しません。

展開の公式定義が必要な場合、シェルコマンド言語の IEEE 仕様書 Pattern Matching Notation で手に入ります。