请注意,严格来说,git 不跟踪目录,只跟踪文件。因此无法添加目录,只能添加其内容。
然而,在.gitignore 的上下文中,git 假装理解目录的唯一原因是
如果文件的父目录被排除,则无法重新包含该文件。
https://git-scm.com/docs/gitignore#_pattern_format
这对排除模式意味着什么?让我们详细了解它们:
bin
这忽略了
您可以通过添加后续的! 条目将忽略的bin 文件和文件夹列入白名单,但您不能将名为bin 的文件夹的内容 列入白名单
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/
与上述相同,但不匹配名为bin 的文件。添加尾随 / 告诉 git 仅匹配目录。
bin/*
这忽略了
-
文件 包含在名为
bin 的文件夹中
- 名为
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/**
这忽略了
-
bin的内容
-
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)