Gitignore常用匹配规则

Keywords: #技术 #Git
  1. 直接书写一个单词
dist

匹配整个项目目录中的所有 dist 目录文件,无论目录和文件埋得有多深。

  1. / 在前
/dist

匹配从当前的 .gitignore 文件层级出发,寻找 dist 目录文件

- .gitignore
- test
  - dist [x]
- dist []

test/dist 这个目录或文件就不能被匹配到。而下面的 dist 就能被匹配到。

  1. / 在中间
test/dist

从当前的 .gitignore 文件层级出发,寻找 test 下面的 dist 目录文件

- .gitignore
- test
  - dist []
- dist [x]
  1. / 在末尾
dist/

与第一种的效果类似,但是只匹配 dist 目录而不匹配文件

- .gitignore
- dist(目录) []
  - test
- dist(文件) [x]
  1. 存在 * 通配符
*.log
logs/*.log

* 匹配所有的字符,但是不包括 /

*.log 匹配所有后缀为 log 的日志文件,无论埋了多少层。

也可以配合其他规则联合使用,比如配合 / 匹配指定目录中的日志文件。如 logs/*.log 则匹配结果如下:

- .gitignore
- logs 
  - dist.log []
  - 1.log []
- 2.log [x]

** 两个星号可以匹配任意字符,包含 /

logs/**/*.log

匹配 logs 目录下的所有 .log 文件,无论文件被埋得多深。

- .gitignore
- logs 
  - sub
    - dist.log []
  - 1.log []
- 2.log [x]
  1. 存在 ? 匹配符
logs/?.log

? 只匹配单个字符,不能匹配多个字符。

- .gitignore
- logs 
  - dist.log [x]
  - 1.log []
- 2.log [x]
  1. 存在 [ ] 匹配符
logs/[0-9].log

只匹配 [ ] 中的字符,如 [0-9] 只匹配数字,[a-z] 只匹配小写字母,[a-zA-Z] 匹配字母。

- .gitignore
- logs 
  - dist.log [x]
  - 1.log []
- 2.log [x]
  1. 存在 ! 排除字符

用于在 .gitignore 中反向排除某个文件,即把它加入到 Git 追踪。

upload/**/*.*

upload 文件夹中的所有文件都排除在 Git 追踪之外。但是这样会存在问题,upload 目录下没有文件被追踪,则 upload 目录本身也不会被追踪。

如果有这样的需求:不追踪 upload 目录中的所有文件,但是需要在远程仓库中保留空的 upload 目录。

upload/**/*.*
!.gitkeep

我们可以在 upload 目录下建立一个 .gitkeep 文件,文件中什么都不用写,只需要让 Git 追踪这个文件即可。使用 ! 字符去掉这个文件的忽略。

- .gitignore
- upload 
  - .gitkeep [x]
  - 1.zip []
  - test []
    - 2.zip []

这样在远程仓库中,就可以保留 upload 目录,目录中存在一个 .gitkeep 文件。