Разница между ** и * в glob matching (.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

Проблема в том, что второй шаблон соответствует только тем js-файлам, которые находятся ровно на 1 уровне в глубине дерева, в то время как я хочу сопоставить все js-файлы под pw-spec.

Выполнение

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
задан NSGod 19 April 2017 в 15:27
поделиться