Cam kết 59856de từ Karsten Blees (kblees) cho Git 1.9 / 2.0 (Q1 2014) làm rõ trường hợp đó:
gitignore.txt
: làm rõ bản chất đệ quy của các thư mục bị loại trừ
Một tiền tố tùy chọn " !
" phủ định mẫu; bất kỳ tệp phù hợp nào được loại trừ bởi một mẫu trước đó sẽ được đưa vào lại.
Không thể bao gồm lại một tệp nếu thư mục mẹ của tệp đó bị loại trừ. ( *
)
( *
: trừ khi một số điều kiện được đáp ứng trong git 2.8+, xem bên dưới)
Git không liệt kê các thư mục bị loại trừ vì lý do hiệu suất, do đó, bất kỳ mẫu nào trên các tệp được chứa đều không có hiệu lực, bất kể chúng được xác định ở đâu.
Đặt dấu gạch chéo ngược (" \
") trước "" đầu tiên !
cho các mẫu bắt đầu bằng chữ " !
", ví dụ: " \!important!.txt
".
Ví dụ để loại trừ mọi thứ trừ một thư mục cụ thể foo/bar
(lưu ý /*
- không có dấu gạch chéo, ký tự đại diện cũng sẽ loại trừ mọi thứ bên trong foo/bar
):
--------------------------------------------------------------
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
--------------------------------------------------------------
Trong trường hợp của bạn:
application/*
!application/**/
application/language/*
!application/language/**/
!application/language/gr/**
Trước tiên, bạn phải liệt kê các thư mục danh sách trắng trước khi có thể liệt kê các tệp trong một thư mục nhất định.
Cập nhật tháng 2 / 3/2016:
Lưu ý rằng với git 2.9.x / 2.10 (giữa năm 2016?), Có thể bao gồm lại một tệp nếu thư mục mẹ của tệp đó bị loại trừ nếu không có ký tự đại diện trong đường dẫn được bao gồm lại .
Nguyễn Thái Ngọc Duy ( pclouds
) đang cố gắng thêm tính năng này:
Vì vậy, với git 2.9+, điều này có thể thực sự hoạt động, nhưng cuối cùng đã được hoàn nguyên:
application/
!application/language/gr/
.gitignore
tài liệu "định dạng mẫu" đã rõ ràng hơn (tháng 12 năm 2013). Xem câu trả lời của tôi dưới đây