git ignore 能够让我们设置一些文件或目录不被git追踪,不加到git的仓库中

但 git ignore的匹配模式和我们通常理解的可能有点出入,使用过程中经常出现这样那样的问题,这篇文章我们就介绍一下ignore 的匹配模式,重点是容易出问题的目录匹配


#,* 和!

先来说一下容易理解的,和其他语言或框架的pattern类似的模式,也是不太出问题的几个匹配符

  • # 代表 行注释
  • 代表 否定模式
  • * 代表除了/之外的任意字符, /是目录分隔符的意思, 即 * 不会跨越目录
  • ** 包含任何字符,包括目录分隔符/

举例如下

ignore pattern说明
hello.*

hello. 开头的任何文件或目录,如

  • hello.txt
  • hello.c
  • a/hello.java
!/foo/bar不包含 foo/bar 
a/**/b
  • a/b
  • a/x/b
  • a/x/y/b

跟目录相关的/

关于/的规则如下

  1.  / 是目录分隔符,可以在ignore匹配模式的开头、中间和结尾
  2. 如果 / 出现在开头和中间, 即被视为相对于这个 .gitignore 文件所在目录下的路径,即 doc/frotz//doc/frotz/ 的作用是相同的, 都匹配的是 do/fontz 目录, 而都不匹配 a/doc/frontz/ , 这点是最容易误解的
  3. 如果/ 只出现在结尾, 如 fontz/ , 匹配包含fontz 目录的任何目录, 即匹配 doc/frotz/ 又匹配a/doc/frontz/  
  4. 如果/ 出现在结尾只匹配目录,否则即匹配目录又匹配文件