Diferencia entre ** y * en la coincidencia global (.gitignore)

Tengo la siguiente estructura de directorios y archivos.

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

Me gustaría ignorar todas las*.js archivos en cualquier lugar dentro depw-spec directorio.

Sin embargo, agregando los siguientes patrones a.gitignore no lo corta:

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

El problema es que el segundo solo coincide con archivos js que están exactamente a 1 nivel de profundidad dentro del árbol, mientras que quiero hacer coincidir todos los archivos js enpw-spec.

Haciend

ls pw-spec/**/*.js

productos [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

Como puedes ve

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

faltan en [1].

Respuestas a la pregunta(6)

Su respuesta a la pregunta