リポジトリ指示構成 — パート3/3:グローバル無視

この記事は、元の場所http://blogs.collab.net/subversion/repository-dictated-configuration-day-3-global-ignoresからの許可を得てミラーリングされています。非アクティブなリンクは削除または更新されています。

著者:Paul Burba

投稿 2013-06-26

リポジトリ指示構成(RDC)に関する3部シリーズの最後のトピックへようこそ。パート2では、新しい`svn:auto-props`プロパティについて説明しました。今日は、RDCに関連するもう1つの新しい継承プロパティである`svn:global-ignores`について説明します。

1.8以前のバージョン管理外のアイテムの無視

繰り返しますが、これは簡単な復習です。これらが聞き覚えがない場合は、このセクションの「Subversionによるバージョン管理」の書籍を簡単に読んでください。

1.7までは、`svn add`および`svn import`サブコマンドが、バージョン管理下に置きたくない特定のアイテムを追加するのを防ぐ(および`svn status`がそのようなバージョン管理外のアイテムを無視するようにする)2つの方法がありました。これらの両方の方法は1.8でも引き続き存在します。

最初の方法は、`global-ignores`ランタイム構成オプションです。

### Set global-ignores to a set of whitespace-delimited globs
### which Subversion will ignore in its 'status' output, and
### while importing or adding files and directories.
### '*' matches leading dots, e.g. '*.rej' matches '.foo.rej'.
global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__ *.rej *~ #*# .#* .*.swp .DS_Store

2つ目は、`svn:ignore`バージョン管理プロパティです。このプロパティは、任意のディレクトリに設定でき、Subversionが無視する必要があるファイルパターンの改行で区切られたリストを値として持ちます。これらのパターンは、ランタイム構成で定義されている無視パターンに追加されます。

svn:global-ignoresプロパティ

Subversion 1.8では、これらの既存の無視メカニズムに`svn:global-ignores`プロパティが追加されました。この新しいプロパティは、本質的に`svn:ignore`プロパティのより強力なバージョンです。以前のプロパティと同様に、`svn:global-ignores`はディレクトリにのみ設定でき、値として改行で区切られたファイルパターンのセットを持つ必要があります1。これらのパターンは、`global-ignores`ランタイム構成オプションで定義されているパターンと、適用可能な`svn:ignore`で定義されているパターンに付加され、無視可能なアイテムを決定します。しかし、`svn:ignore`とは異なり、`svn:global-ignores`プロパティは継承可能であり、プロパティが設定されているディレクトリの下にあるすべてのパスに適用されます2。ディレクトリの直接の子だけではありません。

次の短い例は、この新しいプロパティの動作を示しています。

`svn:global-ignores`パターン自体は無視されます(`global-ignores`ランタイム構成と`svn:ignore`プロパティも同様です)。`--no-ignore`オプションを使用するときです。したがって、ワーキングコピー内のすべてのバージョン管理外のアイテムを表示するには、そのオプションを`status`サブコマンドに渡します。

1.8.0>svn st --no-ignore
?       calc\trunk\doc\README.foo
I       calc\trunk\file.bar
I       calc\trunk\file.baz
I       calc\trunk\file.foo
I       calc\trunk\file.qux

ここでは、4つのファイルが無視されており、1つ(README.foo)はバージョン管理外ですが、無視パターンに一致しないことがわかります。まず、`calc/trunk`の`svn:ignore`プロパティを見てみましょう。

1.8.0>svn pg svn:ignore -vR
Properties on 'calc\trunk':
  svn:ignore
    *.foo
    *.moo

これは`file.foo`に対応しています。次に、ランタイム構成を確認すると、このスニペットが見つかります。

### Set global-ignores to a set of whitespace-delimited globs
### which Subversion will ignore in its 'status' output, and
### while importing or adding files and directories.
### '*' matches leading dots, e.g. '*.rej' matches '.foo.rej'.
global-ignores = *.qux

これは`file.qux`に対応しています。しかし、`file.bar`と`file.baz`はどうでしょうか?残っているオプションは1つだけです。新しい`svn:global-ignores`プロパティです。確かに、リポジトリのルートで、残りの2つの無視されたファイルに対応するパターンを持つそのプロパティが見つかります。

1.8.0>svn pg svn:global-ignores -v --show-inherited-props calc\trunk
Inherited properties on 'calc\trunk',
from '.':
  svn:global-ignores
    *.bar
    *.baz

最終的な考察

`svn:auto-props`に関するパート2で説明したように、`svn:global-ignores`は、可能な限りリポジトリツリーの上位に設定する必要があります。そして、最後に1回だけ言及する価値があります。パート1で説明した継承プロパティの制限、つまり`svn:auto-props`と`svn:global-ignores`によるRDCの制限を理解していることを確認してください。

注記:

  1. `svn:global-ignores`プロパティの無視パターンは、任意の空白文字(`global-ignores`ランタイム構成オプションと同様)で区切ることができるように意図されていましたが、改行のみ(`svn:ignore`プロパティと同様)で区切ることができるバグが1.8.0にあります。

  2. パート1で説明した継承プロパティに関する注意点は、もちろん依然として適用されます!

著者について

Paulは、Apache Software FoundationのSubversionプロジェクトのコミッターであり、過去9年間Subversionに取り組んでいます。彼はニューハンプシャー州の自宅からCollabnetでソフトウェアエンジニアとして働いており、コーディングをしていないときは、通常、甥とスキーをしたり、友人とマウンテンバイクに乗ったり、妻と旅行をしたりしています。遠い過去のある時期に、Paulはニューハンプシャー大学を卒業し、ビジネスの学位を取得しました。その後比較的最近、ボストン大学でコンピュータサイエンスの修士号を取得しました。