.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/* 的范围小于后两条,取反规则成功生效 |