2012-01-12 18 views
15

Tengo la siguiente estructura de directorios y archivos.Diferencia entre ** y * en concordancia global (.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 

me gustaría hacer caso omiso de todos los archivos en cualquier lugar dentro *.jspw-spec directorio.

Sin embargo, la adición de los siguientes patrones de .gitignore no es suficiente:

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

El problema es que el segundo sólo coincide con los archivos js que son exactamente 1 nivel profundo dentro del árbol, mientras que yo quiero para unir todos los archivos js bajo pw-spec.

Haciendo

ls pw-spec/**/*.js 

produce [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 se puede ver

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

faltan en [1].

+2

Lea http://stackoverflow.com/a/1470664/6309 – VonC

Respuesta

2

Crear un .gitignore en pw-spec en el que se inserta estas dos líneas:

*.js 
*/*.js 

También tenga en cuenta que si ya dispone de archivos rastreados en este subdirectorio que desea "sin seguimiento", hay que hacerlos desconocidos para el índice como tal:

git rm --cached path/to/file 

Por ejemplo, si en el directorio pw-spec que puede hacer:

find -type f -name "*.js" | xargs git rm --cached 
+0

He añadido '.gitignore' en 'pw-spec'. Sin embargo, '* .js' solo concuerda con los descendientes directos de' pw-spec', y no concuerda con los archivos '.js' dentro de los subdirectorios. –

+0

Sí, estaba mezclando con '.git/info/exclude' ... Espere – fge

+0

Ver publicación actualizada, funciona para mí (tm) – fge

6

Hay dos enfoques para este tipo de situaciones, en función de sus necesidades.

Una solución es poner

# generated files 
*.js 

en pw-spec/.gitignore.

La segunda solución es poner:

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

y así sucesivamente en el enfoque de la .gitignore principal file.This es quebradizo si se añaden más subdirectorios.

Por lo general, prefiero poner el archivo .gitignore en el mismo nivel que el archivo Makefile que genera los archivos que ignoro.

+0

Esta solución todavía funciona, pero a partir de 2013, puede hacer exactamente lo que intentó el OP: 'pw-spec/**/*. Js'. Ver [esta respuesta] (http://stackoverflow.com/a/1470664/5191105). – Isaac

Cuestiones relacionadas