一度に 1 つずつ見ていきましょう。
何かを無視することは、リポジトリに入れたくないものを誤ってリポジトリに入れないようにするための方法にすぎません。本質的にグローバルにすることも、特定のディレクトリに対してのみローカルにすることもできます。
Subversion で何かを無視すると、次の 2 つのことが行われます。
- あなたがするとき、それはリストされません
svn status
- を行っても追加されません。
svn add *
それだけです。実際、無視はリポジトリにないファイルに対してのみ機能します。リポジトリに追加されたファイルを無視することはできません。
なぜグローバルに何かを無視したいのですか?
私がC開発をしているとしましょう。*.c サフィックスを持つファイルを取得すると、*.o サフィックスを持つファイルにコンパイルされます。これらの *.o ファイルを自分のディレクトリに置きたくないので、グローバルな無視を設定します。
1 つのディレクトリだけで何かを無視したいのはなぜですか?
プログラムをビルドして実行すると、ディレクトリにファイルが作成されるとしましょうoutput.txt
。それをリポジトリに追加したくないのでsvn:ignore
、そのディレクトリにそのファイルを無視するように設定します。
私は Maven で何かを構築し、Maven はターゲットディレクトリを作成します。すべての Maven プロジェクトで、Subversion にそのターゲットディレクトリを無視するように指示します。
空白で区切られたグロブとは
どういう意味ですか?
グロビングは、正規表現のような構文の安価で単純な形式です。あなたはおそらくそれをいつも使っています。主にコマンドラインで使用されます。これはグロビングを使用しています:
$ ls *.txt
したがって、空白で区切られたすべてのグロブは、上記のようなグロブ式の集まりであることを意味し、それがどこにあっても無視したい. コンマではなく空白で区切ります。
右:
global-ignores="*.o *~ *.class"
違う:
global-ignores="*.o, *~, *.class"
もう 1 つ、ignores 内の glob (つまり、ファイル指定) (global か by かに関係svn:ignore
なく) には、ディレクトリ プレフィックスを付けることができません。ディレクトリをグローバルに無視することはできませんがsvn:ignore
、ディレクトリは無視できます。たとえば、Maven を使用すると、targetというディレクトリの下にすべてがビルドされます。svn:ignore
ターゲットディレクトリにセットアップできます。
それで、あなたの質問に戻ります。誰もがこのファイルを持っているが、誰もそれを Subversion に追加してはならない場合、そのディレクトリでは無視する必要があります。誰かが誤って Subversion に追加するのを防ぐだけです。彼らの視界からそれを隠すことはありません。
実際、最終的には、無視を無視できます。以前にファイルを無視すると言っていたとしても、指定するだけでファイルをコミットして追加できます。
コミットしてはならないファイルを誤ってコミットしないようにしたい場合は、私のpre-commitトリガーを使用する必要があります。これにより、コミットしてはいけないものとその場所を指定できます。グロビング構文または正規表現構文を使用できます。例えば:
[file Don't allow people to add foo files to the bar directory]
file=**/bar/foo.*
access=no-add
users=@ALL
[file Don't allow people to add bar files to the foo directory]
match=/bar/foo.*$
access=no-add
users=@ALL
1 つ目はglobを介して設定されます。2 つ目は正規表現で設定されます。
これがあなたの質問に答えることを願っています。