Lưu ý rằng, nói một cách chính xác, git không theo dõi các thư mục, chỉ theo dõi các tệp. Do đó không thể thêm một thư mục, chỉ có nội dung của nó .
.gitignore
Tuy nhiên, trong bối cảnh đó , git giả vờ hiểu các thư mục vì lý do duy nhất là
Không thể bao gồm lại tệp nếu thư mục mẹ của tệp đó bị loại trừ.
https://git-scm.com/docs/gitignore#_pattern_format
Điều này có ý nghĩa gì đối với các mẫu loại trừ? Hãy đi qua chúng một cách chi tiết:
bin
Điều này bỏ qua
- tệp có tên
bin
.
- nội dung của các thư mục có tên
bin
Bạn có thể đưa vào danh sách trắng bin
các tệp và thư mục bị bỏ qua bằng cách thêm các !
mục nhập tiếp theo , nhưng bạn không thể đưa nội dung của các thư mục có tên vào danh sách trắngbin
bin
!bin/file_in_bin # has no effect, since bin/ is blacklisted!
!bin/* # has no effect, since bin/ is blacklisted!
!file_in_bin # has no effect, since bin/ is blacklisted!
!bin # this works
bin/
Tương tự như trên, ngoại trừ nó không khớp với các tệp được đặt tên bin
. Việc thêm một dấu chỉ /
cho git khớp với các thư mục.
bin/*
Điều này bỏ qua
- tệp chứa trong một thư mục có tên
bin
- nội dung của các thư mục con trực tiếp của các thư mục có tên
bin
bin/* # blacklists bin/file_in_bin and bin/subfolder/
!bin/subfolder/file_in_sub # has no effect, since bin/subfolder is blacklisted!
!bin # whitelists files named bin/bin, since bin/ itself is not blacklisted
!bin/ # has no effect, since bin/ itself is not blacklisted
!bin/file_in_bin # works since bin/ itself is not blacklisted
!file_in_bin # works too
!bin/subfolder # works (so implicitly whitelists bin/subfolder/file_in_sub)
!bin/subfolder/ # works just as well
!bin/* # works for file_in_bin and subfolder/
bin/**
Điều này bỏ qua
- nội dung của
bin
- nội dung của các thư mục con (bất kỳ mức lồng nào) trong
bin
bin/** # blacklists bin/file_in_bin and
# bin/subfolder/ and bin/subfolder/file_in_sub and
# bin/subfolder/2/ and bin/subfolder/2/file_in_sub_2
!bin/subfolder/file_in_sub # has no effect, since bin/subfolder is blacklisted
!bin/subfolder/2/ # has no effect, since bin/subfolder is blacklisted
!bin/subfolder/2/file_in_sub_2 # has no effect, since bin/subfolder is blacklisted
!bin/subfolder # works only in combinations with other whitelist entries,
# since all contents of subfolder are blacklisted (1)
!bin/file_in_bin # works since bin itself is not blacklisted
!bin/* # works for file_in_bin and subfolder; see (1)