.gitignore 忽略清单文件负责匹配那些不希望被 git 托管的文件。
将不需要被 git 管理的文件匹配规则添加到此文件中,在执行 git 命令的时侯,git 就会忽略这些文件。
使用
在项目根目录下创建名为 .gitignore 的清单文件,配置需要忽略的文件列表
.gitignore文件更新时若目标文件已暂存,需要移除目标文件的暂存状态才能生效
规则语法
在 .gitignore 文件中每一行均视为一条文件匹配规则。每条规则均基本以glob 模式进行匹配。
关于 glob 模式可参考 glob文件匹配规则。
这里仅列举常用规则:
- 以 #开头的行视为注释行,不会计入匹配规则
- 以 /开头表示根目录,反之则指向.gitignore文件所在目录内的所有目录
- 以 /结尾表示目录,将会忽略目录以及目录下的所有子文件。若不以/结尾则会因为不确定是目录还是文件,而忽略目录的同时忽略掉以此命名的文件
- /分割每一层目录,在每层目录中,通配符- *可以匹配任意多个字符
- **可以视为任意层数目录,因此- a/**/1可以匹配到- a/1、- a/b/1、- a/b/c/1
- ?可以视为任意单个字符
- !开头表示不忽略此行规则所匹配的文件
- []包含单个字符的匹配列表,例如- [ab]指代此字符允许为- a或- b,- [0-9]指代此字符允许为任意数字
示例
下面通过示例直观解释
| 1 | # .gitignore 的 注释 | 
规则冲突
这里有一个需求: :忽略目录 src/plugin 下除了 src/plugin/@help 和 src/plugin/tools 以外的目录
本人依照惯性思维进行了如下的 ignore 规则配置:
| 1 | /src/plugins/ | 
结果发现后两条取反没有生效,@help 与 tools 目录依然被 git 过滤掉了。
这里就牵扯到了规则文件的一个坑点,即:
git 对于配置文件规则的读取是按照从上到下进行规则匹配的,这代表着当前面的规则匹配范围更大时,后面的规则将不再生效。
显然 /src/plugins/ 在这里的范围是要大于后续两条取反规则的,导致了后两条规则无效化。
怎么解决这个问题呢?只需要添加一个 * 即可:
| 1 | # /src/plugins/* 的范围小于后两条,取反规则成功生效 |