2017-04-05 6 views
1
$ git version 
git version 2.9.3.windows.1 

gitignoreの+(1つ以上の)パターンマッチャーに問題があるようです。ファイル名に埋め込まれた数字のパターン修飾子として使用される+*というテストがあります。私はTest.txtをソース管理にし、Test [0-9] +。txtファイルを無視したい。Gitの.gitignoreが1つ以上のアスタリスク修飾子で動作しない+

ディレクトリ:

$ ll | grep Test 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test.txt 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test123.txt 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test1235.txt 
-rw-r--r-- 1 asdf 1049089  0 Apr 5 15:55 Test124.txt 

Gitのテスト1ファイルの内容を無視します:

Test[0-9]+.txt 

テスト1:

$ git status | grep Test 
    Test.txt 
    Test123.txt 
    Test1235.txt 
    Test124.txt 

これは、第四ファイルを介し第二を除外している必要があります。

Gitはテスト2ファイルの内容を無視します:

Test[0-9]*.txt 

テスト2:

$ git status | grep Test 
    Test.txt 

これは、すべてのファイルを除外している必要があります。

どうしてですか?

答えて

1

.gitignoreファイルは、ではなく、の正規表現を使用しています。したがって、+を使用すると有効ではありません。

あなたの2番目の試行は実際にあなたが望むものに近いです。

Test*.txt 

これはTest始まるとの間に何かを.txtで終わるファイルを除外します。しかしglob内の*はゼロ幅になる可能性があるので、Test.txtもキャッチします。

あなたが持っているものは最も簡単なオプションかもしれません。一致します

Test[0-9]*.txt 

Test.txt、続いて(何も含まない)ものが続く、任意の数字が続きます。

それはまた桁過去の数値以外のテキストを持っている

Test1foo.txt 

に一致するようにだから、不完全です。しかし、あなたの要件がどのように特定されるかは、これを指示します。あなたが本当にその後、どれだけ多くの桁数を選択し、それは非常に具体的な試合にするためにそのような複数のエントリを使用し、それはすべての数字だと確信しなければならない場合にも、ちょうど

Test[0-9].txt 
Test[0-9][0-9].txt 
Test[0-9][0-9][0-9].txt 
Test[0-9][0-9][0-9][0-9].txt 
Test[0-9][0-9][0-9][0-9][0-9].txt 

のように、いくつかのパターンを追加することができます。

2

.gitignoreは、正規表現ではなく、Globパターンのみをサポートします。

これはgitignore man pageは言及するものである:

そうでない場合は、FNM_PATHNAMEフラグをgit treats the pattern as a shell glob suitable for consumption by fnmatch(3):パターン内のワイルドカードは、パス名に/と一致しなくなります。
たとえば、「Documentation/*.html」は「Documentation/git.html」に一致しますが、「Documentation/ppc/ppc.html」または「tools/perf/Documentation/perf.html」には一致しません。

詳細情報については、Glob Patterns vs Regexを参照してください。

関連する問題