2012-01-12 12 views
15

Ho la seguente struttura di directory e file.Differenza tra ** e * nella corrispondenza globale (.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 

vorrei ignorare tutti i file in qualsiasi punto all'interno *.jspw-spec directory.

Tuttavia, aggiungendo i seguenti modelli di .gitignore non è tagliato:

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

Il problema è che la seconda corrisponde solo i file js che sono esattamente 1 livello in profondità all'interno della struttura, mentre io voglio per abbinare tutti i file js sotto pw-spec.

Facendo

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 

Come si può vedere

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

sono mancanti da [1].

+2

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

risposta

2

Creare un .gitignore in pw-spec in cui si inseriscono queste due linee:

*.js 
*/*.js 

noti inoltre che se si dispone già di file monitorati in questa sottodirectory cui si desidera "non tracciata", si deve fare loro sconosciuto l'indice in quanto tale:

git rm --cached path/to/file 

Per esempio, se nella directory pw-spec si può fare:

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

Ho aggiunto '.gitignore' in 'pw-spec'. Tuttavia, '* .js' corrisponde solo ai discendenti diretti di' pw-spec', e non corrisponde ai file '.js' nelle sottodirectory. –

+0

Sì, stavo mixando con '.git/info/exclude' ... Tieni premuto – fge

+0

Guarda il post aggiornato, Works For Me (tm) – fge

6

Ci sono due approcci per questo tipo di situazione, a seconda delle esigenze.

Una soluzione è quella di mettere

# generated files 
*.js 

in PW-spec/.gitignore.

La seconda soluzione è di mettere:

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

e così via nell'approccio .gitignore principale file.Questa è fragile se vengono aggiunti altri sottodirectory.

Generalmente preferisco mettere il file .gitignore allo stesso livello del Makefile che genera i file che sto ignorando.

+0

Questa soluzione funziona ancora, ma dal 2013 è possibile eseguire esattamente ciò che l'OP ha provato: 'pw-spec/**/*. Js'. Vedi [questa risposta] (http://stackoverflow.com/a/1470664/5191105). – Isaac

Problemi correlati