2012-01-12 13 views
15

Tôi có cấu trúc thư mục và tệp sau đây.Sự khác nhau giữa ** và * trong kết hợp toàn cục (.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 

Tôi muốn bỏ qua tất cả *.js file bất cứ nơi nào trong pw-spec thư mục.

Tuy nhiên, thêm các mẫu sau để .gitignore không cắt nó:

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

Vấn đề là cái thứ hai chỉ phù hợp với các file js đó là chính xác 1 mức sâu bên trong cây, trong khi tôi muốn để khớp tất cả các tệp js theo pw-spec.

Làm

ls pw-spec/**/*.js 

sản xuất [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 

Như bạn thấy

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

bị thiếu từ [1].

+2

Đọc http://stackoverflow.com/a/1470664/6309 – VonC

Trả lời

8

Sự khác biệt là ** không hoạt động, ít nhất là không dành cho tất cả mọi người. Xem

Why doesn't gitignore work in this case?

Bạn có thể có một riêng biệt .gitignore trong pw-spec/

2

Tạo một .gitignore trong pw-spec trong đó bạn chèn hai dòng sau:

*.js 
*/*.js 

Cũng lưu ý rằng nếu bạn đã có file theo dõi trong thư mục con này mà bạn muốn "untracked", bạn phải làm cho họ không biết đến chỉ số như vậy:

git rm --cached path/to/file 

Ví dụ, nếu trong thư mục pw-spec bạn có thể làm:

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

Tôi đã thêm '.gitignore' trong 'pw-spec'. Tuy nhiên, '* .js' chỉ khớp với các hậu duệ trực tiếp của' pw-spec' và không khớp với các tệp '.js' trong các thư mục con. –

+0

Vâng, tôi đã trộn với '.git/info/exclude' ... Giữ trên – fge

+0

Xem bài đăng cập nhật, nó Hoạt động cho tôi (tm) – fge

6

Có hai phương pháp cho loại này tình hình, tùy thuộc vào nhu cầu của bạn.

Một giải pháp là đưa

# generated files 
*.js 

trong pw-spec/.gitignore.

Giải pháp thứ hai là đặt:

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

và vân vân trong cách tiếp cận các .gitignore chính file.This là giòn nếu có nhiều thư mục con được thêm vào.

Tôi thường thích đặt tệp .gitignore ở cùng cấp với tệp Makefile tạo tệp mà tôi bỏ qua.

+0

Giải pháp này vẫn hoạt động, nhưng đến năm 2013, bạn có thể thực hiện chính xác những gì OP đã thử: 'pw-spec/**/*. Js'. Xem [câu trả lời này] (http://stackoverflow.com/a/1470664/5191105). – Isaac

Các vấn đề liên quan