2012-01-12 17 views
15

Aşağıdaki dizin yapısına ve dosyalarına sahibim.Glob eşleştirmesinde ** ve * arasındaki fark (.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 

yerde pw-spec dizin içindeki tüm *.js dosyaları görmezden istiyoruz.

Ancak .gitignore için aşağıdaki desenleri ekleyerek kesmek yok:

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

Sorun isterken diğeri sadece, ağacın içinde derin tam olarak 1 seviye olan js dosyaları maçları olmasıdır Tüm js dosyalarını pw-spec altında eşleştirmek için. Eğer

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

eksik görebileceğiniz gibi

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 

[1]:

Doing

ls pw-spec/**/*.js 

[1] üretir.

*.js 
*/*.js 

Ayrıca Zaten "izlenmeyen" istiyorum bu alt dizininde izlenen dosyalar varsa, bunları bilinmeyen yapmak zorunda olduğuna dikkat:

+2

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

cevap

2

hangi bu iki satırı eklemek pw-spec bir .gitignore oluşturma gibi endeksi:

git rm --cached path/to/file 

örneğin, dizindeki pw-spec içinde yapabileceğiniz eğer:

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

adresini okudum.pw-spec' içinde gitignore'. Ancak, '* .js' yalnızca' pw-spec'ın doğrudan torunları ile eşleşir ve alt dizinlerdeki '.js' dosyaları ile eşleşmez. –

+0

Evet, '.git/info/exclude' ile karıştırıyordum ... Tutun – fge

+0

Güncelleme yayınına bakın, Beni İşe Al (tm) – fge

6

ayrı .gitignore olabilir bakın.

bir çözüm pw spec/.gitignore içinde

# generated files 
*.js 

koymaktır.

ikinci çözelti koymaktır:

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

ve benzeri daha fazla alt dizinleri ilave edilir ise, ana .gitignore file.This yaklaşımı kırılgandır içinde.

Genellikle .gitignore dosyasını göz ardı ettiğim dosyaları üreten Makefile ile aynı seviyeye getirmeyi tercih ederim.

+0

Bu çözüm hala çalışıyor, ancak 2013 itibariyle, OP'nin tam olarak ne denediğini yapabilirsiniz: 'pw-spec/**/*. Js'. [Bu cevap] bölümüne bakın (http://stackoverflow.com/a/1470664/5191105). – Isaac