2013-10-15 11 views
7

Khi tôi biên dịch ++ dự án của tôi C, nhiều tập tin đối tượng chia sẻ được tạo ra có phần mở rộng nhưRegex giống như mẫu vỏ glob cho gitignore

.so 
.so.0 
.so.7 
.so.0.7 

tôi cần phải thêm tất cả những tập tin .gitignore tôi. Là này một regex, tôi có thể sử dụng

\.so[\.0-9]* 

Tuy nhiên, the documentation nói rằng .gitignore

xử lý mô hình như một glob vỏ phù hợp cho tiêu thụ bởi fnmatch(3) với FNM_PATHNAME cờ

tôi tìm thấy không có cách nào để làm những gì tôi muốn với các tài liệu fnmatch tôi tìm thấy. Có thực sự không có cách nào để làm điều này?

+3

Sử dụng nhiều dòng:... '* .so'' * .so [0-9] '' * .so [0-9] [0-9] ' vv Nếu vòng quay có thể thành hai chữ số, bạn sẽ cần nhiều mẫu hình cầu hơn nữa.(hg có 'cú pháp:' chỉ thị trong '.ggignore' của nó để bạn có thể trộn regex và glob như mong muốn; có thể ai đó sẽ thêm cái gì đó như thế này vào git someday.) – torek

+1

Chỉ cần giữ phân cấp cài đặt riêng biệt giải quyết loại điều này hoàn toàn . – jthill

+0

Quan tâm: https://github.com/git/git/commit/2e22a85e5c01d041434682fe75f58be94de0801b – VonC

Trả lời

12

Trong khi câu trả lời bằng cách @SpeakEasy thể bỏ qua .so tập tin trong một bước duy nhất sử dụng *.so*, đối với trường hợp sử dụng của bạn bỏ qua tập tin trong định dạng nhất định, bạn có thể sử dụng hai mục trong .gitignore của bạn cho cụ thể hơn bỏ qua quy tắc

*.so 
*.so.[0-9]* 

Từ gitignore man page

Mỗi dòng trong một GITI tệp gnore chỉ định một mẫu.

Git xử lý các mô hình như một glob vỏ phù hợp cho tiêu thụ bởi fnmatch

Điều quan trọng cần lưu ý là mô hình không giống như biểu thức thông thường.

Python có mô-đun có tên fnmatch, bạn có thể sử dụng để xác minh xem tên tệp cụ thể có khớp với mẫu hay không.

mẫu ví dụ:

import fnmatch 
pattern = "*.so.[0-9]*" 
filenames = ["a.so", "b.so.0", "b.so.11", "b.so.1.0", "b.so.1.0.12"] 

for filename in filenames: 
    print filename, fnmatch.fnmatch(filename, pattern) 

>>> a.so False 
    b.so.0 True 
    b.so.11 True 
    b.so.1.0 True 
    b.so.1.0.12 True 
+0

Đây không phải là * chính xác * giống nhau (mặc dù nó có thể là tốt): ví dụ, nó khớp với 'a.so.' và' b.so ... 9'. – torek

+0

Vâng, tôi không phải là một chuyên gia vì vậy tôi không biết tôi nên tin tưởng ai nhất, nhưng tôi cảm thấy như câu trả lời @torek là an toàn hơn và rõ ràng hơn. Cho tôi biết nếu tôi sai. –

+1

@mu 無 Mọi thứ sẽ khớp với '* .so. [0-9] *. [0-9] *' cũng sẽ khớp với '* .so. [0-9] *', phải không? Cách viết '* .so.someDigits.someDigits',' someDigits' chỉ là 'bất kỳ số chữ số' nào? –

5

Không thêm dòng *.so* không hoạt động? Hay bạn cần kiểm soát tốt hơn?

+2

Tôi muốn kiểm soát tốt hơn để được an toàn. Tôi luôn "khám phá" các tiện ích mở rộng mới. – roim

0

Từ torek's comment:

Sử dụng nhiều dòng:

*.so 
*.so.[0-9] 
*.so.[0-9].[0-9] 

, vv

Tôi không biết nếu có một cách tốt hơn ...

1

Tôi nghĩ bạn có thể hoàn thành nó theo hai dòng:

.so 
.so.[0-9]* 
Các vấn đề liên quan