web-dev-qa-db-ja.com

グロブマッチングにおける**と*の違い(.gitignore)

私は次のディレクトリ構造とファイルを持っています。

pw-spec/
|-- event_spec.coffee
|-- event_spec.js
|-- integration
|   `-- service
|       |-- auth_spec.coffee
|       |-- auth_spec.js
|       |-- chat_spec.coffee
|       |-- chat_spec.js
|       |-- transport_spec.coffee
|       `-- transport_spec.js
|-- message_spec.coffee
|-- message_spec.js
|-- pw_spec.coffee
|-- pw_spec.js
|-- run.coffee
|-- run.html
|-- run.js
|-- service
|   |-- auth_spec.coffee
|   |-- auth_spec.js
|   |-- chat_spec.coffee
|   |-- chat_spec.js
|   |-- stream_spec.coffee
|   `-- stream_spec.js
|-- spec.coffee
|-- spec.js
`-- stub
    |-- stream.coffee
    |-- stream.js
    |-- transport.coffee
    `-- transport.js

4 directories, 27 files

*.jsディレクトリ内のすべてのpw-specファイルを無視したいと思います。

ただし、次のパターンを.gitignoreに追加しても、カットされません。

pw-spec/*.js
pw-spec/**/*.js

問題は、2番目のものはツリー内のちょうど1レベルの深さのjsファイルにのみ一致するのに対し、pw-specの下のすべてのjsファイルに一致させたいということです。

やってる

ls pw-spec/**/*.js

[1]を生成します:

pw-spec/service/auth_spec.js
pw-spec/service/chat_spec.js
pw-spec/service/stream_spec.js
pw-spec/stub/stream.js
pw-spec/stub/transport.js

ご覧のように

pw-spec/integration/service/auth_spec.js
pw-spec/integration/service/chat_spec.js
pw-spec/integration/service/transport_spec.js

[1]から欠落しています。

19
Emil Ivanov

違いは、少なくともすべての人にとって**が機能しないことです。見る

この場合、なぜgitignoreが機能しないのですか?

.gitignoreに個別のpw-spec/を含めることができます

8
Mischa Arefiev

このタイプの状況には、ニーズに応じて2つのアプローチがあります。

1つの解決策は置くことです

# generated files
*.js

pw-spec /.gitignore内。

2番目の解決策は次のとおりです。

/pw-spec/*.js
/pw-spec/*/*.js
/pw-spec/*/*/*.js

メインの.gitignoreファイルなど。このアプローチは、サブディレクトリがさらに追加されると脆弱になります。

私は通常、無視しているファイルを生成するMakefileと同じレベルに.gitignoreファイルを配置することを好みます。

7
Ben Martin

.gitignorepw-specを作成し、次の2行を挿入します。

*.js
*/*.js

また、このサブディレクトリで「追跡解除」するファイルをすでに追跡している場合は、そのファイルをインデックスから認識できないようにする必要があることにも注意してください。

git rm --cached path/to/file

たとえば、ディレクトリpw-specにある場合、次のことができます。

find -type f -name "*.js" | xargs git rm --cached
2
fge