2010-05-12 24 views
59

Tôi đang cố gắng sử dụng tệp .gitignore với mẫu phủ định (dòng bắt đầu bằng!), Nhưng nó không hoạt động theo cách tôi mong đợi.Các mẫu phủ định hoạt động như thế nào trong .gitignore?

Như một ví dụ nhỏ, tôi có cấu trúc thư mục folllowing:

C:/gittest 
-- .gitignore 
-- aaa/ 
    -- bbb/ 
    -- file.txt 
    -- ccc/ 
    -- otherfile.txt 

và trong tập tin gitignore của tôi, tôi có điều này:

aaa/ 
!aaa/ccc/ 

hiểu biết của tôi (dựa trên this doc page) là tập tin aaa/ccc/otherfile.txt không nên bỏ qua, nhưng trên thực tế git bỏ qua mọi thứ dưới aaa.

Tôi có hiểu nhầm câu này không: "Tiền tố tùy chọn! Phủ định mẫu; bất kỳ tệp trùng khớp nào bị loại trừ bởi mẫu trước đó sẽ được bao gồm lại".

BTW, đây là trên Windows với msysgit 1.7.0.2.

Trả lời

104

Tôi nghĩ rằng những gì bạn thực sự muốn làm là:

aaa/* 
!aaa/ccc 

Bạn đang nói nó "không nhìn vào aaa" vì vậy nó không bao giờ thậm chí xem xét các con đường aaa/ccc. Nếu bạn sử dụng các ký tự đại diện, nó vẫn đọc các nội dung của aaa, sau đó mỗi mục phù hợp với ký tự đại diện và được bỏ qua, trừ aaa/ccc mà được đưa trở lại.

+2

không hoạt động đối với tôi .... – iconoclast

+2

@iconoclast: Sau đó, bạn có thể đang làm điều gì đó khác biệt. Đăng một câu hỏi khác (với thông tin đầy đủ) nếu bạn muốn được giúp đỡ. – Cascabel

+0

Điều này không hiệu quả với tôi: /apps/* !/Apps/myApps/FluidTest/bin/ –

10

Nếu bạn muốn loại trừ tất cả mọi thứ trong aaa, nhưng bao gồm aaa/ccc và tất cả mọi thứ bên dưới nó, bạn nên sử dụng:

aaa/* 
!aaa/ccc 
!aaa/ccc/* 

dòng đầu tiên cho git để bỏ qua everthing dưới aaa, thứ hai nói với nó không bỏ qua thư mục aaa/ccc mà thực sự "cho phép" dòng thứ ba mà sau đó nói với nó không bỏ qua mọi thứ bên dưới aaa/ccc.

+1

Dòng thứ ba không có sự khác biệt đối với tôi. –

+1

Để có thể bao gồm mọi thứ trong bất kỳ thư mục con nào của 'aaa/ccc' ở mọi cấp độ, những gì làm việc cho tôi là'! Aaa/ccc/** 'thay vì'! Aaa/ccc/* ' – boclodoa

1

Nếu bất kỳ ai vẫn không nhìn thấy các mục mới bỏ qua trong một git status chạy git update-index trước khi tay có thể giúp git xem các thay đổi (ít nhất là trong phiên bản 1.9.x của gitbash).

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