YSS

Write Less & Do More

详解.gitignore文件配置

前言

.gitignore 这个文件可以说是在git项目中几乎是必不可少的一个文件。

它主要做的事情就像它的名字一下,就是为了忽略某些文件。

因为很多时候,我们在开发项目的过程中,无法避免的会产生临时的文件,特别像前端项目中的node_modules这个文件夹。

如果不使用.gitignore去处理掉的话,每次提交都有可能会带上这个文件夹。那就是一个很糟心的事情。

现状

我们平时大部分时候,项目里自动就给你生成了,或者早已经有人帮你加好了。最多可能,有时候,因为做某个新功能,引入了一些不必要的文件及内容,需要去修改.gitignore。

绝大部分情况下,我们是很少去做改动的。或者压根就没有细心的看过。

我拿一个简单项目里的.gitignore作为例子:

node_modules/
tmp/
.DS_Store
*.log

简单解释一下:

忽略node_modules和tmp这个目录及其下的所有文件,忽略.DS_Store这个文件,忽略所有以.log结尾的文件。

那具体的 .gitignore 文件的格式规范是什么样的呢?

格式规范

格式规范如下:

  1. 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
  2. 可以使用标准的 glob 模式匹配。
  3. 匹配模式如果最后跟的是反斜杠(/),说明要忽略的是目录。
  4. 要忽略指定模式以外的文件或目录,可以在模式的前面加上惊叹号(!)取反。

除了第2项外,其他三项都好理解。

那,具体的 glob 模式,指的是什么呢?

标准的glob模式定义

标准的glob模式,其实就是简化了的正则表达式。简化一点就是:

  1. 星号(*)匹配零个或多个任意的字符。
  2. [abc] 匹配任何一个列在方括号中的字符。
  3. 问号(?)只匹配一个任意的字符。
  4. 如果在方括号([])中使用短划线(-)表示所有在这两个字符范围内的都可以匹配。比如:[0-9]

需要注意的是

  1. *不会匹配/,所以,如果是/src/*.txt匹配的是/src/xxx.txt
  2. /xxx 代表的是 根项目的 xxx 文件。

参考

  1. http://man7.org/linux/man-pages/man7/glob.7.html
  2. 《Pro Git》